c# - 如何获取静态成员中类类型的 System.Type 实例?

标签 c# reflection static-members

我在类中有一个公共(public)静态属性。该类应用了一些自定义属性。我想访问静态属性中的属性。

在非静态成员中,我可以使用 this.GetType() 获取当前类的类型,但是如何在类的静态成员中执行此操作?

请注意..

  • 我不想使用 typeof(typename) 因为 到继承问题。 [我会有 该属性继承到派生 类。]。

  • 我也不想使用泛型作为 好吧。

编辑

这是我的目标。

我有一个名为 EntityBase 的抽象基类。我所有的实体都源自这个类。每个实体还带有一个名为 TableMappingAttribute 的自定义属性,它让我知道它在运行时引用/映射到的表。我已经在 EntityBase 中有一个属性,它返回实体的映射 TableName。

我总是需要一个实体实例来访问 TableName 属性。我希望有时静态访问此属性,例如 MyEntity.TableName。我的项目中有大量实体。我希望将此静态属性添加到 EntityBase 类本身中。所以我必须在运行时发现类型。我如何在 EntityBase 类本身中执行此操作?

谢谢。

最佳答案

基本上你不能。 typeof(...) 您需要使用的。

请记住,如果您尝试使用:

Type type = MyDerivedType.SomeStaticProperty;

MyBaseType声明,它实际上最终会被编译为

Type type = MyBaseType.SomeStaticProperty;
无论如何。静态成员基本上不是多态的。如果您尝试以多态方式使用它们,您将遇到这样的问题。

编辑:所以从您的编辑来看,您似乎正在尝试做上述类型的事情,

MyEntity.TableName

而不是

EntityBase.TableName

这根本行不通。编译器将发出代码来获取 EntityBase.TableName。运行时没有“当前类”的概念。这里没有上下文。

基本上你需要改变你的设计。如果您想使用继承,您可能需要一个并行的层次结构 - 一个用于元数据(例如表名称),另一个用于实际对象。所以你会得到类似的东西:

public class MyEntity : EntityBase<MyEntityType>

其中 MyEntityType 派生自并行层次结构中的 EntityType。然后您可以在元数据层次结构中使用继承。

或者,无论如何,只要使 EntityBase 通用就可以让您了解您正在谈论的实体类型:

public class MyEntity : EntityBase<MyEntity>

我知道你说过你不想使用泛型,但由于你想做的事情是行不通的,你至少应该考虑一下......

关于c# - 如何获取静态成员中类类型的 System.Type 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1124124/

相关文章:

c# - 如何计算特定 block 的 AES GCM IV

c# - 通过反射获取对象

java - 使用 Java 反射显示字段类型

c++ - 静态 qt 对话框窗口不可能?

java - 关于何时可以在类定义中调用静态方法的约束背后的推理

c++ - 为什么获取内联定义的静态常量整数成员变量的地址不会违反 ODR?

c# - 有没有可能这不是一成不变的

c# - MTOM 是否需要 WCF 中的 messageContract?

c# - 如何自定义 ASP.Net Core 模型绑定(bind)错误?

java - 蒯因使用反射