C#学习教程:关于在c#中使用新约束分享


关于在c#中使用新约束

我从不使用新的约束,因为我不清楚使用它。 在这里,我发现了一个样本,但我只是不明白使用。 这是代码

class ItemFactory where T : new() { public T GetNewItem() { return new T(); } } public class ItemFactory2 where T : IComparable, new() { } 

所以任何人都请让我理解使用新的Constraint与小而简单的样品,以供现实世界使用。 谢谢

除了Darin的答案之外 ,这样的事情会失败,因为Bar没有无参数构造函数

  class ItemFactory where T : new() { public T GetNewItem() { return new T(); } } class Foo : ItemFactory { } class Bar { public Bar(int a) { } } 

实际错误是: 'Bar' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ItemFactory'

以下也会失败:

 class ItemFactory { public T GetNewItem() { return new T(); } } 

实际错误是: Cannot create an instance of the variable type 'T' because it does not have the new() constraint

此约束要求使用的generics类型是非抽象的,并且它具有允许您调用它的默认(无参数)构造函数。

工作范例:

 class ItemFactory where T : new() { public T GetNewItem() { return new T(); } } 

这显然现在会迫使你为作为generics参数传递的类型有一个无参数构造函数:

 var factory1 = new ItemFactory(); // OK var factory2 = new ItemFactory(); // doesn't compile because FileInfo doesn't have a default constructor var factory3 = new ItemFactory(); // doesn't compile because Stream is an abstract class 

非工作示例:

 class ItemFactory { public T GetNewItem() { return new T(); // error here => you cannot call the constructor because you don't know if T possess such constructor } } 

新约束指定generics类声明中的任何类型参数都必须具有公共无参数构造函数。

引自官方网站

在您的示例中,约束作用于类声明中的 。 在第一种情况下,它要求通用T对象具有默认(无参数)构造函数。 在第二个示例中,它要求T应该具有默认的无参数构造函数,并且它必须实现IComparable接口。

您可以读取new() ,就好像它是一个带有构造函数的接口。 就像IComparable指定类型T具有方法CompareTo一样,新约束指定类型T具有公共构造函数。

上述就是C#学习教程:关于在c#中使用新约束分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1269728.html

(0)
上一篇 1天前
下一篇 1天前

精彩推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注