我還沒有做過一段時間,我需要找出這是否是最佳的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