1
20
不,您不能。我建议您使用一个抽象属性来抽象您的基类,您可以在需要时提取该属性。然后,每个子类可以通过返回常量(如果需要)来实现属性。缺点是您不能在基类中的静态方法中使用它——但是这些方法无论如何都不会与子类相关联。 (也) 允许 子类以自定义每个实例的属性,如有必要…但这很少是实际问题。) 如果这样做还不够,您可能需要考虑一个并行类型层次结构。基本上,多态性不会以特定于类型的方式在.NET中发生,只会以特定于实例的方式发生。 如果你 仍然 要做到这一点并通过反射获取它,我建议您只编写单元测试来确保定义了相关的常量。当你超出类型系统所能描述的范围时,这通常是你能做到的最好的。 |
2
9
做一个
例如: 基类:
然后在派生类中
|
3
8
这是我的工作方式。我按照别人的建议使用了属性。
如果希望实例访问该属性,只需将其添加到基本抽象类。
常量的使用
|
4
6
新理念
这里有一个奇怪的想法:不要直接使用继承,而是创建一个单独的类,为从某个类型派生的每个类型提供一个常量值。
基本实例:
现在我有了允许我这样做的代码:
原始答案
您可能不喜欢它,但最接近实现这一点的方法是声明一个抽象的只读(否
如果您有子类的一个实例,那么它可以像常量一样工作,即使它在技术上是实例级的(对于给定类的所有实例,它都是相同的)。
例如,考虑一下,
如果你想静态访问它,那么…那你就走运了。但在这种情况下,我看不到您如何在不使用反射的情况下获得值。也许这就是你的意图,我不知道。 |
5
1
可以在基类中调用一个静态方法,例如“register”,该方法传递一个类型和一个常量值,其目的是由子类型的类构造函数调用。然后,在所有的基类构造函数中添加一个检查,表明正在构造的对象是注册类型的。
然后在其他地方,您可以构造好的子类型实例,但是尝试构造坏的子类型会得到一个异常。我认为在构建时出现运行时错误是这种方案最快出现错误的时候。 (如果涉及线程,则要对注册表使用ConcurrentDictionary) |
6
0
还有一种方法没有被覆盖,它使用
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |