C#方法,可以选择由子类实现,而无需基本方法
我有强迫症代码,所以请容忍我 我们有一个基类,具有:C#方法,可以选择由子类实现,而无需基本方法,c#,syntax,C#,Syntax,我有强迫症代码,所以请容忍我 我们有一个基类,具有: virtual protected void OnHierarchyInitialized() { } 现在,当有人重写此方法时,几乎可以期望他们调用基本方法: protected override void OnHierarchyInitialized() { base.OnHierarchyInitialized(); } 但是。。基本方法中没有发生任何事情。将来也不会。我只是不想让那个子类的人在需要调用基方法时“担心”。 另
virtual protected void OnHierarchyInitialized()
{
}
现在,当有人重写此方法时,几乎可以期望他们调用基本方法:
protected override void OnHierarchyInitialized()
{
base.OnHierarchyInitialized();
}
但是。。基本方法中没有发生任何事情。将来也不会。我只是不想让那个子类的人在需要调用基方法时“担心”。
另外:这是实现代码中丑陋的脂肪,它分散了代码的其他部分,这些代码看起来像蒙娜丽莎的C版本
当然,我可以把它变成一个抽象的方法,但是这里有一个很大的缺点,那就是它需要实现。也把我的艺术作品搞砸了
问题
在虚方法和抽象方法之间是否存在某种东西,它告诉我们:
选择性地覆盖我,但没有可调用的基本方法
提前谢谢 在c#中没有关键字可以做到这一点<代码>虚拟
是此方法的最佳选择
只是不必担心是否有基类实现。实现派生类的人不应该担心它
只有一个问题:当前的实现是否完全取代了基类的实现
如果有,不要调用基类。如果没有:调用它。在c#中没有关键字可以这样做<代码>虚拟
是此方法的最佳选择
只是不必担心是否有基类实现。实现派生类的人不应该担心它
只有一个问题:当前的实现是否完全取代了基类的实现
如果有,不要调用基类。如果没有:调用它。可以肯定的是,您唯一能做的就是使用内置的XML文档通知调用方。例如,这是覆盖您的方法的人将看到的方式:
可以肯定的是,您唯一能做的就是使用内置的XML文档通知调用者。例如,这是覆盖您的方法的人将看到的方式:
如果您的代码如下所示:
public void Foo()
{
// do something
OnHierarchyInitialized();
// do something else
}
您可能想考虑事件而不是继承:
public event EventHandler HierarchyInitialized = delegate { };
OnHierarchyInitialized();
public void Foo()
{
// do something
OnHierarchyInitialized(new EventArgs());
// do something else
}
private void OnHierarchyInitialized(EventArgs e)
{
EventHandler handler = HierarchyInitialized;
handler(this, e);
}
在这里,消费者可以在感兴趣时订阅
HierarchyInitialized
事件 如果您的代码如下所示:
public void Foo()
{
// do something
OnHierarchyInitialized();
// do something else
}
您可能想考虑事件而不是继承:
public event EventHandler HierarchyInitialized = delegate { };
OnHierarchyInitialized();
public void Foo()
{
// do something
OnHierarchyInitialized(new EventArgs());
// do something else
}
private void OnHierarchyInitialized(EventArgs e)
{
EventHandler handler = HierarchyInitialized;
handler(this, e);
}
在这里,消费者可以在感兴趣时订阅
HierarchyInitialized
事件 如果您绝对确定基本方法实际上不会做任何事情,那么抽象方法就是正确的方法。我知道你说这会把你的艺术作品搞砸,但你可以这样想:你想要一种明确告诉用户基本方法什么都不做的方法。一个abstract
方法将实现这一点,同时提醒他们该方法存在,即使他们选择不使用它
想想接口是如何工作的——它们是一组抽象方法,它们什么都不做,但必须被重写。这是正确的方法,并通过强制包含该方法来称赞您的艺术作品。空方法向用户显示,他们可以连接到OnHierarchyInitialized
方法以实现某些目标。如果您绝对确定基本方法实际上不会做任何事情,那么抽象方法就是正确的方法。我知道你说这会把你的艺术作品搞砸,但你可以这样想:你想要一种明确告诉用户基本方法什么都不做的方法。一个abstract
方法将实现这一点,同时提醒他们该方法存在,即使他们选择不使用它
想想接口是如何工作的——它们是一组抽象方法,它们什么都不做,但必须被重写。这是正确的方法,并通过强制包含该方法来称赞您的艺术作品。空方法向用户显示,他们可以挂接到OnHierarchyInitialized
方法以实现某些功能。如果基本方法不起作用,您为什么担心他们调用或不调用它呢?这会让使用起来有点混乱,因为您必须“思考”基本方法中可能发生的情况。这违反了我的强迫症。我们这里说的是完美主义!所以问题是:我不想让子类化它的人担心它。那么把它放在文档中(XML文档?)我认为这是基于一个“如果重写,必须始终调用基类的方法”规则-它实际上并不存在。如果基本方法不起作用,你为什么担心他们调用或不调用它?这会让使用起来更混乱,因为你必须“思考”基本方法中可能发生的事情。这违反了我的强迫症。我们这里说的是完美主义!所以问题是:我不想让子类化它的人担心它。那么把它放在文档中(XML文档?)我认为这是基于一个“如果重写,则必须始终调用基类的方法”规则——这是不存在的。最后一个问题是一个(理论上不必要的)我试图为子类的作者解决的问题。我们这里说的是静态完美主义;)最后一个问题是一个(理论上不必要的)问题,我试图为子类的作者摆脱这个问题。我们这里说的是静态完美主义;)