我有一个名为WizardViewModelBase抽象类。
我所有的WizardXXXViewModel类从抽象基类继承。
该基地有一个获取方法的属性。 每个子类的需求和覆盖该字符串
属性作为视图模型的它的显示名称。
只有一个视图模型称为WizardTimeTableWeekViewModel需要一个二传手,因为我必须设置
羯羊视图模型是本周A或B.每周使用2周的ViewModels像一个时间表
WizardTimeTableWeekAViewModel和WizardTimeTableWeekBViewModel是多余的。
我不希望重写二传手在所有其他类,因为他们并不需要一个二传手。
我能以某种方式告诉它不需要重写二传手子类?
或任何其他建议吗?
随着界面我可以自由使用getter或setter,但有很多空的setter
性能是不是我的选择。
有趣的..我只是想,如果我真的需要设置相反WizardPages我首先说的一切DisplayNames会发生什么。 也许我不应该硬编码,吸附剂中的字符串,并把字符串,因为本地化的reesource文件,然后我需要一个二传手在每个子类XD任何地方
不要声明的setter方法为虚。
如果由于某种原因(我想不出一个的!),你需要为它在你的继承层次,然后使用密封,当你重写它的顶部虚:
http://msdn.microsoft.com/en-us/library/aa645769(VS.71).aspx
如果属性不是抽象的,那么任何一个基类可以选择只覆盖了二传手,吸气剂,或两者兼而有之。
如果你希望你的子类不能访问您的二传手,除了只有一个给定的子类,你可以使用内部访问修饰符只吸气剂,并实施不应该访问的二传手在另一个组件类。
您应该引入一个新的抽象类,这将所固有WizardViewModelBase类。 这个类应该使用重载的属性get和set访问,但会留下一个属性的抽象,就像这样:
public abstract string DisplayName
{
get;
set;
}
然后你可以使用这个类作为WizardTimeTableWeekViewModel类的基类,你西港岛线能够覆盖get和set访问。
我会使用一个受保护的setter和创建一个单独的函数来设置值。 所有的课后不具有相同的接口,以便其他人从别人区别开来明显应该帮助可读性。
class Base
{
public String Value { get; protected set; }
}
class SpecialChild : Base
{
public void SetValue(String newValue) { this.Value = newValue; }
}
// Somewhere else
SpecialChild special = foo as SpecialChild;
if (special != null)
{
special.SetValue('newFoo');
}
else
{
foo.DoSomeStuff();
}
文章来源: C# - What should I do when every inherited class needs getter from base class, but setter only for ONE inherited class