作者:桦林ye家伟 | 来源:互联网 | 2023-05-17 12:27
添加类型参数约束以防止抽象类是否可以将类型参数限制为抽象类的具体实现,如果这些实现没有默认构造函数?例如,如果我有:publicabstractclassAnimal{privat
添加类型参数约束以防止抽象类
是否可以将类型参数限制为抽象类的具体实现,如果这些实现没有默认构造函数?
例如,如果我有:
public abstract class Animal { private Animal() { } public Animal(string name) { // ... } // ... } public class Penguin : Animal { // ... } public class Chimpanzee : Animal { // ... }
我也有以下课程:
public class ZooPen where T : Animal { // ... }
我想允许new ZooPen()
和new ZooPen()
,但我想禁止new ZooPen()
。
这可能吗?
这是实现您所要求的一种方式。
abstract class Animal { readonly string Name; Animal() { } public Animal(string name) { Name = name; } } abstract class Animal : Animal where T : Animal { public Animal(string name) : base(name) { } } class Penguin : Animal { public Penguin() : base("Penguin") { } } class Chimpanzee : Animal { public Chimpanzee() : base("Chimpanzee") { } } class ZooPen where T : Animal { } class Example { void Usage() { var penguins = new ZooPen(); var chimps = new ZooPen(); //this line will not compile //var animals = new ZooPen(); } }
任何维护此代码的人可能会有点困惑,但它完全符合您的要求。
您可以添加new()
约束,这将要求该类不是抽象的并且具有默认构造函数。
上述就是C#学习教程:添加类型参数约束以防止抽象类分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记
public class ZooPen where T : Animal { public ZooPen() { if (typeof(T).IsAbstract) throw new ArgumentException(typeof(T).Name + " must be non abstract class"); } }