作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试实现以下场景,即通用 TestClassWrapper 将能够访问构成它的类的静态属性(它们都将派生自 TestClass)。像这样的东西:
public class TestClass
{
public static int x = 5;
}
public class TestClassWrapper<T> where T : TestClass
{
public int test()
{
return T.x;
}
}
给出错误:
'T' is a 'type parameter', which is not valid in the given context.
有什么建议吗?
最佳答案
基本上,至少不能没有反射(reflection)。
一个选择是在构造函数中放置一个委托(delegate),这样创建实例的人就可以指定如何获取它:
var wrapper = new TestClassWrapper<TestClass>(() => TestClass.x);
如有必要,您可以通过反射(reflection)来做到这一点:
public class TestClassWrapper<T> where T : TestClass
{
private static readonly FieldInfo field = typeof(T).GetField("x");
public int test()
{
return (int) field.GetValue(null);
}
}
(如有必要,添加适当的绑定(bind)标志。)
这不是很好,但至少您只需要查找该字段一次...
关于c# - 如何在泛型类中访问 T 类型的静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7186491/
我是一名优秀的程序员,十分优秀!