【问题标题】:How to role usage of c# IList interface type or other interface as type?如何将 c# IList 接口类型或其他接口作为类型的角色使用?
【发布时间】:2014-05-15 18:22:08
【问题描述】:

IList 是一个接口。我刚刚开始学习泛型。而且我知道接口是类实现它承诺使用其方法的合同。所以我从没想过使用类似的值类型:

有人可以解释一下这是什么以及在使用类似类型的接口时如何考虑它的用法:

IList<Writer> someName;

我在这里创建 IList 接口的通用类型。但是接口不是一个类那么我应该如何想象它的作用?

还是我误会了什么?

【问题讨论】:

    标签: interface ilist


    【解决方案1】:

    如果一个成员/变量被声明为一个接口,它可以用任何实现了上述契约的类来实例化。例如,您可以用List&lt;Writer&gt;() 实例化someName,但不能用new IList&lt;Writer&gt;()

    IList<Writer> someName = new List<Writer>();
    // someName can access any member of IList, but not specific members of List
    

    【讨论】:

    • 好的,那么在使用实现上述合同/接口的新类实例化 IList 之后,下一步我想做什么?使用 IList 方法?如果 writer 还必须实现 IList 接口,我为什么要将它分配给 IList 接口?
    • 接口的任何成员,但不是来自不在接口中的实例化对象的成员。
    【解决方案2】:
    IList<Writer> someName;
    

    将持有对任何实现 IList&lt;T&gt; 接口的类实例的引用,并将 Writer 指定为类型参数。

    【讨论】:

      【解决方案3】:
       // Returning from list
              List<Writer> myWriters = new List<Writer>();
              myWriters.Add(new Writer("Andy", "FL"));
              myWriters.Add(new Writer("Mary", "FL"));
              myWriters.Add(new Writer("Ken", "CA"));
              myWriters.Add(new Writer("Robert", "WA"));
              myWriters.Add(new Writer("Brian", "CA"));
      
              IList<Writer> roWriters;
              roWriters = myWriters.AsReadOnly();
      

      我可以这样说吗?以上使用 IList 允许 myWriters 使用 .AsReadOnly();方法?否则就不可能了? .AsReadOnly();是不是 IList 本身没有 List 的方法?

      【讨论】:

      • AsReadOnly() 是 List 的一种方法。您可以使用myWriters.AsReadOnly(),但不能使用roWriters.AsReadOnly()。你仍然可以同时使用.Add(item)
      • 那么IList在这里的作用是什么?
      • 在这种情况下,它没有什么特别的。你可以声明List&lt;Writer&gt; roWriters,这段代码会做同样的事情。在请求参数或声明类字段时,它通常更有用。例如,一个在屏幕上打印Something列表的方法,您可以要求参数为IList&lt;Something&gt;,并将List&lt;Something&gt;Something[]传递给它,因为两者都实现了IList&lt;Something&gt;
      猜你喜欢
      • 2021-06-23
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2010-11-08
      • 1970-01-01
      相关资源
      最近更新 更多