Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-接口-类型初始化_C# - Fatal编程技术网

C#-接口-类型初始化

C#-接口-类型初始化,c#,C#,举个例子: IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" }; 这里有接口的优点是什么?这是一个示例,您正在创建一个具有字符串数据类型的IList 泛型引入.NET 类型的概念框架 参数,使 设计延迟的类和方法 一种或多种类型的说明 直到类或方法被声明为止 并通过客户端代码进行实例化。对于 例如,通过使用泛型类型 参数T您可以编写一个 类,其他客户端代码可以使用该类 无需承担以下费用或风险: 运行时强

举个例子:

IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" };
这里有接口的优点是什么?

这是一个示例,您正在创建一个具有字符串数据类型的IList

泛型引入.NET 类型的概念框架 参数,使 设计延迟的类和方法 一种或多种类型的说明 直到类或方法被声明为止 并通过客户端代码进行实例化。对于 例如,通过使用泛型类型 参数T您可以编写一个 类,其他客户端代码可以使用该类 无需承担以下费用或风险: 运行时强制转换或装箱操作

在这里阅读更多


没有优点也没有缺点。如果您的代码需要IList,那么就给它一个IList。如果你的代码需要一个数组,那么就给它一个。

我真的不明白为什么数组要实现IList。当您调用Add时,它会抛出一个异常数组没有IList语义,因为它不可调整大小。这就是为什么我避免将数组设置为IList。如果我需要一份清单,我会这样写:

IList<string> _lstColl = new List<string>() { "Alex", "Sam", "Gates", "Riaz" };
IList\u lstColl=newlist(){“Alex”、“Sam”、“Gates”、“Riaz”};

(PS:使用标准框架的集合接口有很多问题,比如缺少方法,甚至缺少接口。当你使用集合接口时,就像通常使用NHibernate时一样,你会意识到它们有时设计得很糟糕。这个接口的开发人员似乎没有意识到这一点(我认为经常使用它们。这只是我的观点。)

优点在于它向读者表明,您没有使用它恰好是一个数组这一事实。我倾向于将局部变量声明为最通用的类型,它包含我需要的所有功能。例如,我将执行以下操作:

using (TextReader reader = File.OpenText(...))
而不是指定
StreamReader

它很少非常重要,但它确实使更改实现的细节变得更容易。例如,假设出于任何原因,我们希望将示例更改为使用
列表而不是数组

您可以更改此设置:

IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" };
IList\u lstColl=new[]{“Alex”、“Sam”、“Gates”、“Riaz”};
为此:

IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };
IList\u lstColl=新列表{“Alex”、“Sam”、“Gates”、“Riaz”};

并且知道它仍然可以编译。有些语义可能不一样,所以您仍然需要小心-但至少您知道它不会使用任何特定于数组的方法。

这是因为没有一个单独的接口只有索引器和计数。是的,请参阅我的关于集合接口的PS。我对.NET co非常失望集合设计。我的意思是,这个列表的类型和语义几十年来就广为人知了。为什么他们会用这么糟糕的集合设计来设计一个新的框架呢?对不起!我的问题会更具体一些。间接初始化接口的好处是什么。(当然,我们不能为接口创建实例).我不认为这个问题是关于泛型的.有缺点.看我的答案。
IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };