我有這樣的抽象類;獲取靜態泛型方法中的當前類型?
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