我想在泛型類中獲取靜態屬性(或我不關心的欄位),我的代碼如下所示:
public interface IModel{
static string Name {get;}
}
public class MyModel : IModel{
static string Name {get;}
}
public class ViewModel<TModel> where TModel : IModel{
public string GetName(){
return TModel.Name;
}
}
但我得到了這個錯誤:
CS0119:TModel 是型別引數,在給定背景關系中無效
正如我猜想的那樣,TModel是一種型別,而不是實際的類。那么我應該怎么做,還是不可能?
uj5u.com熱心網友回復:
有一個實驗性的 C# 功能可以滿足您的需求。
但在那之前,您可以使用單獨的靜態泛型類來解決它
public interface IModel{
}
public static class IModelStatics<TModel> where TModel : IModel{
public static string Name {get;}
}
public class MyModel : IModel{
}
public class ViewModel<TModel> where TModel : IModel{
public string GetName(){
return IModelStatics<TModel>.Name;
}
}
uj5u.com熱心網友回復:
目前,C# 不允許您訪問泛型型別的靜態成員,因此您必須使用反射
public class ViewModel<TModel> where TModel : IModel{
public string GetName(){
return (string)typeof(TModel).GetProperty("Name", BindingFlags.Public | BindingFlags.Static).GetValue(null, null);
}
}
uj5u.com熱心網友回復:
無緣無故在Interface中沒有靜態欄位這樣的功能。這不是介面應該如何作業的方式。你真的需要讓它靜態嗎?如果您像這樣創建一個物件的新實體,可能會更好:
public interface IModel
{
public string Name { get; }
}
public class MyModel : IModel
{
public string Name { get; } = "MyName";
}
public class ViewModel<TModel> where TModel : IModel, new()
{
public string GetName()
{
return (new TModel()).Name;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494548.html
上一篇:Java-獲取每個子類的實體
下一篇:檔案包含漏洞篇
