如何在 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
时,我得到空值,有什么建议吗?
DeclaringType
仅指嵌套和泛型类型。在这种情况下,您有一个类型的静态成员,而不是嵌套类型或泛型类型定义,因此它按设计返回 null。 如果你有一个Bar
PropertyInfo
,那么我认为你可以弄清楚该属性属于什么类型,但我看不出如何作为一个参数(以及一个非通用参数),你将能够,因为你所拥有的只是参数类型的裸实例。 你已经失去了它的来源。
我还要评论说,这似乎是一个非常糟糕的设计 - 必须知道对象的实例来自哪里引入了太多的耦合而无法维护。
类型.声明类型
成员信息.声明类型
这样是不可能的
。
将 SomeType参数传递给 SomeMethod 时,将传递对 SomeType 类型的对象的引用。此对象不知道其他数据引用它的任何信息。