C# - 我该怎么办时,每一个继承类从基类的getter需要,但二传手只为一个继承类(C# - Wh

2019-09-29 16:29发布

我有一个名为WizardViewModelBase抽象类。

我所有的WizardXXXViewModel类从抽象基类继承。

该基地有一个获取方法的属性。 每个子类的需求和覆盖该字符串

属性作为视图模型的它的显示名称。

只有一个视图模型称为WizardTimeTableWeekViewModel需要一个二传手,因为我必须设置

羯羊视图模型是本周A或B.每周使用2周的ViewModels像一个时间表

WizardTimeTableWeekAViewModel和WizardTimeTableWeekBViewModel是多余的。

我不希望重写二传手在所有其他类,因为他们并不需要一个二传手。

我能以某种方式告诉它不需要重写二传手子类?

或任何其他建议吗?

随着界面我可以自由使用getter或setter,但有很多空的setter

性能是不是我的选择。

有趣的..我只是想,如果我真的需要设置相反WizardPages我首先说的一切DisplayNames会发生什么。 也许我不应该硬编码,吸附剂中的字符串,并把字符串,因为本地化的reesource文件,然后我需要一个二传手在每个子类XD任何地方

Answer 1:

不要声明的setter方法为虚。

如果由于某种原因(我想不出一个的!),你需要为它在你的继承层次,然后使用密封,当你重写它的顶部虚:

http://msdn.microsoft.com/en-us/library/aa645769(VS.71).aspx



Answer 2:

如果属性不是抽象的,那么任何一个基类可以选择只覆盖了二传手,吸气剂,或两者兼而有之。

如果你希望你的子类不能访问您的二传手,除了只有一个给定的子类,你可以使用内部访问修饰符只吸气剂,并实施不应该访问的二传手在另一个组件类。



Answer 3:

您应该引入一个新的抽象类,这将所固有WizardViewModelBase类。 这个类应该使用重载的属性get和set访问,但会留下一个属性的抽象,就像这样:

    public abstract string DisplayName 
    {
        get;
        set;
    }

然后你可以使用这个类作为WizardTimeTableWeekViewModel类的基类,你西港岛线能够覆盖get和set访问。



Answer 4:

我会使用一个受保护的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