我有这样的抽象类;获取静态泛型方法中的当前类型?
public abstract PropertyBase
{
public static System.Type GetMyType()
{
return !!!SOME MAGIC HERE!!!
}
}
我想继承它,当我调用静态GetMyType()时,我想返回子类的类型。所以如果我声明一个子类型;
public class ConcreteProperty: PropertyBase {}
然后当我打电话
var typeName = ConcreteProperty.GetMyType().Name;
我希望 '的typeName' 设置为 “ConcreteProperty。”我怀疑有没有办法做到这一点,但如果有人知道如何获得这些信息,我很感兴趣。
(我试图解决的具体问题是在WPF依赖属性的详细程度,我很想能够做这样的事;
class NamedObject : DependencyObject
{
// declare a name property as a type, not an instance.
private class NameProperty : PropertyBase<string, NamedObject> { }
// call static methods on the class to read the property
public string Name
{
get { return NameProperty.Get(this); }
set { NameProperty.Set(this, value); }
}
}
我几乎有实现,但我不能完全得到我需要我的NameProperty类的信息)
它是静态的原因是什么?声明为虚拟或抽象,您将遇到问题 – 2010-01-24 08:03:07
为什么静态:这是一个奇怪的角度,而一个C#并非真正为此设计的。有时你的类型只能有一个值。所以'class Steve:Person {}'声明了一个类型,但由于只有一个可能的值,所以'Steve'类也标识了一个实例。宣布类型'史蒂夫'宣布单身'史蒂夫'。 WPF DP's就是这样;他们无法确定它们是实例数据,元数据还是类型。我试图将它们全部折叠成一个代码构造。这是所有投机ATM,但我有兴趣追求它自己。 – 2010-01-24 12:23:09
这就是为什么我需要这个:为样板类型描述符代码生成部分类。动态创建的属性名称不能与该类型上定义的属性冲突,所以我需要类型内的属性名称列表进行检查。这是更多的样板代码,因此进入codegen。它也是静态的完美选择,因为它不会改变。所以我需要在静态构造函数中生成一个包含当前类型属性的列表。那么,地狱,现在我需要在T4模板中使用魔术字符串。 – Will 2010-05-21 14:32:19