【发布时间】:2014-11-05 12:31:32
【问题描述】:
我已经有一段时间没有这样做了,我需要确定这是否是最好的 OO 方法。我无法在derived 类的base 类中分配(设置)受保护的属性。我有一个解决方案,但我想知道这是否是最好的 design pattern 使用,还是有更好的方法?
我的基类
public abstract class EmailBase
{
protected string Subject { get; set; }
protected string To { get; set; }
protected string From { get; set; }
protected virtual void Send()
{
using (MailMessage mail = new MailMessage())
{
// Ok send message here...
}
}
}
我有两个不同的电子邮件模板需要发送,所以我认为有两个派生类是个好主意,但是我将发布一个派生类的代码来解决手头的问题。
public class DerivedOne: EmailBase
{
private const string emailTemplate = "some static text for the body...";
public DerivedOne()
{
}
// This is how I want to set the base class properties,
// but it feels I am just duplicating properties...
public string To
{
set
{
base.To = value;
}
}
在控制器中...
// A send email button was pressed by the user
private bool SendEmail(Model)
{
DerivedOne eMail = new DerivedOne()
{
To = Model.To;
};
}
我倾向于不通过派生构造函数发送属性,因为我相信设置属性往往更简洁。但是,我知道在派生构造函数中您可以设置基本属性: base()
所以这就是我问的原因,在派生类中创建相同的属性以便控制器可以看到我错了吗? (因为受保护的属性当然不能在继承之外看到)
【问题讨论】:
-
为什么你在基类中的属性不是公开的?
-
这不是破坏多态性理论吗? (这不是倒退,这是我的想法)所以我想我错了?
-
它强制执行多态性,因为您可以通过基类型的引用访问任何派生类型。
-
我想说:要么在你的基类中使属性抽象,要么使它们虚拟。 Your choice.
-
请查看此 SO 帖子以供参考stackoverflow.com/questions/12270941/…
标签: c# oop design-patterns