【发布时间】:2019-07-24 12:08:43
【问题描述】:
我正在尝试为子类设置一种访问静态变量的方法,以便在静态方法中使用。
下面是一些代码,概述了我需要支持的那种结构。
abstract class Shape{
static abstract int sides;
public static Shape CreateFromFile(string filename){
... reads a number of sides from a file, and returns the appropriate shape ..
}
}
class Pentagon : Shape{
static int sides = 5;
}
class Hexagon : Shape{
static int sides = 6;
}
这不会编译,因为不支持静态抽象字段或属性。我发现更改子类的构造函数中的值会更改原始值,因为没有为新类制作静态字段的副本,所以这不是一个选项。
除了以非静态形式重写之外,这里还有其他选择吗?这将需要大量重复的代码,因为这些方法没有任何特定于类的功能。
【问题讨论】:
-
将
GetNumberOfSides属性添加到基类。每个实现类都可以按照他们认为合适的方式实现它。会不会有点额外的工作?是的 - 但我猜工作不超过 10 分钟。 -
泛型也可以使用(因为
static将被限定为泛型的类型)——但我认为我的第一个建议更简单、更容易理解。 -
不清楚您在这里要做什么。首先,为什么你甚至想要一个抽象的静态?所以无论如何,把它当作静态的对我来说没有意义。
-
@mjwills 这是我尝试过的一种解决方案,但由于每个类的实现都是相同的,我希望有一种更简洁的方法来做到这一点。
-
我认为你选择的答案比我的建议less干净。
标签: c# inheritance static