如何在 C# 中访问静态成员的声明类型

本文关键字:静态成员 声明 类型 访问 | 更新日期: 2023-09-27 18:32:30

我有一个需要访问静态属性的声明类型的场景。场景如下:

public static class FOO{
     public static SomeType Bar{get;set;}
}
public static class BAZ{
   public static void SomeMethod(SomeType p){
       //here i wanna get type of container of 'p' which should be FOO
   }
}    
 BAZ.SomeMethod(FOO.Bar);

但是当我调用p.GetType().DeclaringType时,我得到空值,有什么建议吗?

如何在 C# 中访问静态成员的声明类型

DeclaringType仅指嵌套和泛型类型。在这种情况下,您有一个类型的静态成员,而不是嵌套类型或泛型类型定义,因此它按设计返回 null。 如果你有一个Bar PropertyInfo,那么我认为你可以弄清楚该属性属于什么类型,但我看不出如何作为一个参数(以及一个非通用参数),你将能够,因为你所拥有的只是参数类型的裸实例。 你已经失去了它的来源。

我还要评论说,这似乎是一个非常糟糕的设计 - 必须知道对象的实例来自哪里引入了太多的耦合而无法维护。

类型

.声明类型

成员信息.声明类型

这样是不可能的

将 SomeType

参数传递给 SomeMethod 时,将传递对 SomeType 类型的对象的引用。此对象不知道其他数据引用它的任何信息。