当前位置: 首页 > 编程语言 > C#

关于在c#中使用新的约束分享

时间:2023-04-10 23:08:05 C#

关于在C#中使用新的约束我从不使用新的约束,因为我不太清楚使用它。在这里我找到了一个示例,但我只是不明白用法。这是代码classItemFactorywhereT:new(){publicTGetNewItem(){returnnewT();}}publicclassItemFactory2whereT:IComparable,new(){}所以任何人都请让我理解使用newConstraint和小而简单的样本在现实世界中使用。谢谢除了达林的回答,这样的事情会失败,因为Bar没有无参数构造函数类ItemFactorywhereT:new(){publicTGetNewItem(){returnnewT();}}classFoo:ItemFactory{}classBar{publicBar(inta){}}实际错误是:“Bar”必须是具有公共无参数构造函数的非抽象类型才能将其用作参数“T”在泛型类型或方法“ItemFactory”中,以下操作也失败了:classItemFactory{publicTGetNewItem(){returnnewT();}}实际错误是:无法创建变量类型'T'的实例,因为它没有new()约束ThisconstraintrequiresThegenerictypeusedisnon-abstract,andithasadefault(no-argument)允许您调用它的构造函数。工作示例:classItemFactorywhereT:new(){publicTGetNewItem(){returnnewT();显然,这现在会强制您为作为泛型参数传递的类型使用无参数构造函数:varfactory1=newItemFactory();//好的varfactory2=newItemFactory();//无法编译,因为FileInfo没有默认构造函数varfactory3=newItemFactory();//不编译,因为Stream是一个抽象类非工作示例:classItemFactory{publicTGetNewItem(){returnnewT();//此处错误=>你不能调用构造函数,因为你不知道T是否拥有这样的构造函数}}在泛型类声明中指定的新约束的任何类型参数都必须具有公共无参数构造函数。从官方网站引用在您的示例中,约束作用于类声明中的。在第一种情况下,它要求通用T对象具有默认(无参数)构造函数。在第二个例子中,它要求T应该有一个默认的无参数构造函数,并且它必须实现IComparable接口。您可以阅读new(),就好像它是带有构造函数的接口一样。正如IComparable指定类型T具有CompareTo方法一样,新约束指定类型T具有公共构造函数。以上就是C#学习教程:关于在c#中使用新约束的所有分享内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: