簡體   English   中英

在接口中創建通用List屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM