【发布时间】:2019-07-09 23:47:39
【问题描述】:
我有这个设置:
public class BaseElement
{
public BaseElement() { }
public virtual void method01()
{
Console.WriteLine("class BaseElement method01");
}
}
public class Element01 : BaseElement
{
public Element01() { }
public override void method01()
{
Console.WriteLine("class Element01 method01");
}
}
public class Element02 : BaseElement
{
public Element02() { }
public override void method01()
{
Console.WriteLine("class Element02 method01");
}
}
现在我想强制Element01/Element02/Element03等类实现method01。 我认为正确的方法是使用接口。 但是由于 Element01/Element02/Element03 等继承自 BaseElement,因此不需要在 Element01/Element02/Element03 等中实现 method01,因为它已经在 BaseElement 中实现。但我想强制 Element01/Element02/Element03 等在这些类中的每一个中实现特定的方法 01。另一方面,我还需要 BaseElement 中的 method01 来处理 Element01/Element02/Element03 等作为 BaseElement。 最好的方法是什么?
(这与抽象函数和虚函数的区别无关。我需要一个接口或抽象类的特定排列。)
【问题讨论】:
-
制作BaseElement类和方法abstract...
-
为什么不把方法抽象化?
-
@KarthikGanesan,我对此的回应是问 OP 为什么? (正如我在上一条评论中所做的那样)试图弄清楚他试图实现的目标,这导致他们明确要求 BaseElement 是一个可实例化的类......
-
你能解释一下这部分吗? 另一方面,我还需要 BaseElement 中的 method01 来处理 Element01/Element02/Element03 等作为 BaseElement。 我不完全理解它
-
我认为你能做的最好的就是“抽象”。如果这不合适,您不能强制派生类的编写者重写虚拟方法,因为由他们决定基类提供的默认行为是否适合他们的需求。
标签: c# class inheritance interface