當我只有一個通用參數時,有什麼方法可以在類型上調用靜態成員。例如,如果我有這樣的事情當你只有通用參數時調用靜態成員
public Get<T>(int id)
{
// I would like to do this
string s = T.SomeMethodName();
}
我能做到這樣,但有點「難吃」,然後,如果它是靜態的還是沒有也沒關係。或者我可以使用Yuriy建議的反射。
ISomeKnownInterface i = (ISomeKnownInterface) new T();
string s = i.SomeMethodName();
所以,問題是現在是更好的方法,使用反射
public TFormDto Get<TFormDto>(int entityId) where TFormDto : AbstractEntityFormDto, new()
{
// create new instance
AbstractEntityFormDto a = (AbstractEntityFormDto) new TFormDto();
string entityName = a.GetEntityFullTypeName();
// use reflection
Type type = typeof(TFormDto);
string entityName = type.GetMethods(BindingFlags.Public | BindingFlags.Static)
.Single(m => m.Name == "GetEntityFullTypeName")
.Invoke(null, null);
是的,它會的。我試圖定義抽象靜態,這是不允許的。 – epitka
通過像這樣的反射來調用方法會更快,然後就像這樣做。這是不是很新鮮,但這是這個框架代碼 AbstractEntityFormDto v =(AbstractEntityFormDto)new TFormDto(); string s = v.EntityFullTypeName; – epitka
你能編輯你的問題嗎,我對你剛剛用這種格式寫的內容感到困惑。 –