【问题标题】:Create generic List property in interface在接口中创建通用 List 属性
【发布时间】:2019-02-06 18:35:19
【问题描述】:

我需要做一个这样的界面:

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; }
}

但是看着other posts 似乎我必须在我的接口类顶部定义 T 。这迫使我在实施时为所有属性使用一种特定类型。这可以以某种方式完成吗?

谢谢

【问题讨论】:

  • 您也可以将接口设为泛型:public interface ISomething&lt;T&gt;,但您需要 2 个泛型类型才能满足您的需求。

标签: c#


【解决方案1】:

您可以使接口成为通用接口,为需要不同类型的每个属性使用类型参数,例如:

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; }
}

【讨论】:

  • 我知道这是摆在我面前的东西 - 谢谢大家!
【解决方案2】:

“但是看其他帖子似乎我必须在顶部定义 T 我的界面类。这迫使我为所有人选择一种特定类型 实现时的属性。 "

没错。但是您可以定义任意数量的通用参数,而不仅仅是一个。所以在你的情况下应该这样做:

public interface ISomething<T, S>
{
    List<T> ListA{ get; set; }
    List<S> ListB {get; set;}
}

现在您可以提供两种完全独立的类型:

class MyClass : ISomething<Type1, Type2> { ... }

【讨论】:

    【解决方案3】:

    你可以使用

    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;}
    }
    

    【讨论】:

      【解决方案4】:

      试试这个代码。

      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; }
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        • 1970-01-01
        • 2010-09-23
        • 2011-05-26
        相关资源
        最近更新 更多