[英]Create generic List property in interface
我需要創建一個這樣的界面:
public interface ISomething
{
List<T> ListA { get; set; }
List<T> ListB { get; set; }
}
然后像這樣實現它:
public class Something01: ISomething
{
public List<string> ListA { get; set; }
public List<Person> ListB { get; set; }
}
或者像這樣:
public class Something02: ISomething
{
public List<int> ListA { get; set; }
public List<string> ListB { get; set; }
}
但是看看其他帖子 ,似乎我必須在接口類的頂部定義T. 在實施時,這迫使我為所有屬性的一個特定類型。 這可以以某種方式完成嗎?
謝謝
您可以使接口具有通用性,並為每個需要不同類型的屬性使用類型參數,例如:
public interface ISomething<TA, TB>
{
List<TA> ListA{ get; set; }
List<TB> ListB {get; set; }
}
並像這樣使用它:
public class Something01: ISomething<string, Person>
{
public List<string> ListA { get; set; }
public List<Person> ListB { get; set; }
}
“但是看看其他帖子,似乎我必須在接口類的頂部定義T。這會強制我在實現時為所有屬性指定一種特定類型。”
真正。 但是您可以根據需要定義任意數量的通用參數 ,而不僅僅是單個參數。 所以在你的情況下,這應該這樣做:
public interface ISomething<T, S>
{
List<T> ListA{ get; set; }
List<S> ListB {get; set;}
}
現在您可以提供兩種完全獨立的類型:
class MyClass : ISomething<Type1, Type2> { ... }
你可以用
public interface ISomething<T, U>
{
List<T> ListA{ get; set; }
List<U> ListB {get; set;}
}
因此,當你定義你的課時,它就是
public class Something : ISomething<Person, string>
{
List<Person> ListA{ get; set; }
List<string> ListB {get; set;}
}
試試這個代碼。
public interface ISomething<T, K>
{
List<T> ListA { get; set; }
List<K> ListB { get; set; }
}
public class Something01 : ISomething<string, Person>
{
public List<string> ListA { get; set; }
public List<Person> ListB { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.