我还没有做过一段时间,我需要找出这是否是最佳的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;
}
}
和Controller ...
// A send email button was pressed by the user
private bool SendEmail(Model)
{
DerivedOne eMail = new DerivedOne()
{
To = Model.To;
};
}
我倾向于,因为我相信设置属性往往是清洁不通过派生的构造函数发送了性能。然而,我知道在派生构造函数中,你可以设置基本属性: base()
所以这就是为什么我问,我错了在派生类中创建相同的属性,以便控制器可以看到它? (因为受保护的属性当然不能在继承之外看到)
为什么你的基类中的属性不公开? – galenus 2014-11-05 12:41:14
这不会破坏多态的理论吗? (这不是一回事,我认为)所以我想我错了? – user3428422 2014-11-05 12:45:19
它强制实现多态,因为您可以通过基类型的引用来访问任何派生类型。 – galenus 2014-11-05 12:49:32