访问静态变量问题的模板方法

Mav*_*ick 0 .net c#

假设我有两个包含静态变量XmlTag的类.第二个类继承自第一个类.我有一个模板方法,需要根据它使用的类型获取XmlTag.无需创建该类型的实例,最好的方法是什么?这是一个例子(不会编译),应该有希望说明我在说什么.

class A{
public static readonly string XmlTag = "AClass";
}

class B : A {
public static readonly string XmlTag = "BClass";
}
Run Code Online (Sandbox Code Playgroud)

此方法当前无效.显然无法从类型参数访问静态变量.

string GetName<T>(T AClass) where T : A
{
    return T.XmlTag;
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 5

首先,停止将泛型方法视为模板.它们不是模板.它们与模板的行为非常不同; 你期望他们表现得像模板可能会导致你在这种情况下误入歧途.

这是我写的关于你的场景的一系列文章以及它为什么是非法的.

http://blogs.msdn.com/ericlippert/archive/2007/06/14/calling-static-methods-on-type-variables-is-illegal-part-one.aspx

http://blogs.msdn.com/ericlippert/archive/2007/06/18/calling-static-methods-on-type-variables-is-illegal-part-two.aspx

http://blogs.msdn.com/ericlippert/archive/2007/06/21/calling-static-methods-on-type-variables-is-illegal-part-three.aspx

请注意,我在第三部分中提到的"动态"功能当然是随C#4.0一起提供的.

为了解决您的实际问题:"最好的方法是什么?" 大概你有一些问题,你认为这样的机制会解决.这种机制实际上并不存在于C#中.我们不可能从您希望这种机制存在的事实中推断出您实际想要解决的问题. 而不是问"我怎样才能让这个不可能的东西在C#中起作用?" 而是描述你遇到的真正问题,我们可以试着想出一个能够更好地解决你真正问题的现有C#机制.