【发布时间】:2017-05-01 15:58:43
【问题描述】:
假设我有 2 个实现相同接口的类:
public interface IDoSomething
{
void DoSomething();
}
public class Child1
{
private const int CONST1 = 0;
void IDoSomething.DoSomehting()
{ /*Do something the way a Child1 would*/ }
}
public class Child2
{
private const int CONST1 = 0;
void IDoSomething.DoSomehting()
{ /*Do something the way a Child2 would*/ }
}
我想知道的是,既然两个类都使用相同的常量 (CONST1),我是否应该创建一个新类:
public class Parent
{
private const int CONST1 = 0;
}
然后让Child1 和Child2 继承自该类,假设此场景中的真实类更大(通过接口实现多个常量和多个函数)?
【问题讨论】:
-
您可以将父类声明为抽象类,然后将常量标记为受保护。然后可以将父类中的接口方法标记为抽象,强制子类实现。
-
你不需要从一个类继承来使用一个常量。你可以从另一个不相关的类中访问一个常量,只要它是公共的。
-
@willaien 你的评论似乎很有道理
-
你可以让两个孩子都实现接口,或者你可以让父母抽象并实现它——但我真的只是想提一下,你可能陷入了我多年来所做的一个陷阱前。尽管了解/理解这些问题很好,但我建议您避免继承,除非很明显您需要它。常用的短语是“优先组合胜过继承”。
-
@Sebastien 它不必在任何一个上,它可以完全在其他地方。如果值在概念上不同,那么您不应该希望对两者使用相同的标识符。如果它在概念上是相同的值,那么找到一个可以容纳它的地方,以存放任何可能需要它的东西。
标签: c# oop design-patterns