【发布时间】:2014-07-15 00:37:05
【问题描述】:
我有一个类似的问题:Can I have a base class where each derived class has its own copy of a static property?,但那里的答案对我来说似乎不是很确定。
基本上,我有一个具有常量属性的类,我想派生一个具有所有相同方法但对变量使用不同值的类。做一个简单的类比,假设我有一个类,部分看起来像这样:
public class Triangle
{
public const NumSides = 3;
int sideLength;
public int Perimeter()
{
return NumSides * sideLength;
}
}
现在我想创建一个与 Triangle 类完全相同的 Square 类,除了 NumSides 现在是 4。
换句话说,我想要一个现在看起来像这样的类:
public class Square : Triangle
{
public const NumSides = 4;
}
但它仍然可以访问 Triangle 类的所有方法。 (如果需要,我可以编写一个新的构造函数,但我不想从原始类中复制十几个方法。它们的行为都应该完全相同,但是 NumSides 现在有了一个值4 个。)
我不知道如何做到这一点,无论是 NumSides 是一个 const 还是一个只有一个 get 函数的静态属性。如果我尝试覆盖常量,我会得到“修饰符 'override' 对此项目无效。”当我尝试覆盖静态属性版本时,我收到相当于“静态成员 Triangle.NumSides 无法标记为覆盖、虚拟或抽象”的消息。
而且,是的,我已经尝试创建一个 Shape 类,将所有功能都放在其中,然后让 Triangle 和 Square 都继承自该类。不过,我在 NumSides 上遇到了同样的问题。派生新类时如何更改常量或静态变量/属性的有效值?
【问题讨论】:
-
正方形是三角形的一种吗?我想我的头刚刚爆炸了一点。
标签: c# inheritance