【发布时间】:2016-11-19 08:32:14
【问题描述】:
很难给它起个标题,如果你能想到一个更好的,我会更新它。但我正在寻找的是一种能够从实例对象引用静态值的方法。例如,假设您有一个名为Animal 的抽象类和两个名为Cat 和Dog 的子类。在抽象类上,我想要一个名为GenusSpecies 的实例变量,当然,这在动物级别没有值,因为它是一个抽象类,但每个Cat 都会有相同的值,但它会与所有的 Dogs 不同。但是,我希望 Cat 和 Dog 类对每种类型的实例都有一个静态值,但我不想在每个实例上都设置它的值,但我希望能够像实例变量一样引用它,因为我将拥有一个像这样的通用变量。
Animal a = new Cat("Garfield");
但我期待
a.GenusSpecies == "Felis catus"
但我不想写
GenusSpecies = "Felis catus";
在构造函数中。但是,如果能够引用 Cat.GenusSpecies 静态值也将是一件好事,因为 Cat 类型的每个实例总是相同的。我知道在某些时候我正在划分两种引用它的方式之间的差异,但是有什么方法可以同时实现这两种引用类型?我希望我已经正确解释了这一点。
【问题讨论】:
-
您可能想要创建一个带有属名的自定义属性并用它标记每个类,例如
[GenusAttribute("Felis catus")] -
确实,这是一个有效且非常好的问题。我会用基于执行上下文或基于引用的分组半静态属性来扩展它。例如,我们需要创建六个团队,每个团队应该有五个 ID 为 1...5 的用户。 ID 属于用户,但在团队级别必须是唯一的!在这种情况下,我将在团队级别使用半静态 LastId OR IDsInUse 但出于某种原因我希望在用户处看到实现。
标签: c# inheritance static instance abstract