是否可以将类型参数限制为抽象类的具体实现,如果这些实现没有默认构造函数?
例如,如果我有:
public abstract class Animal
{
private Animal()
{
}
public Animal(string name)
{
// ...
}
// ...
}
public class Penguin : Animal
{
// ...
}
public class Chimpanzee : Animal
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我也有以下课程:
public class ZooPen<T>
where T : Animal
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想,让new ZooPen<Penguin>()与new ZooPen<Chimpanzee>(),但我想禁止new ZooPen<Animal>().
这可能吗?
dss*_*539 10
这是实现您所要求的一种方式.
abstract class Animal
{
readonly string Name;
Animal() { }
public Animal(string name) { Name = name; }
}
abstract class Animal<T> : Animal where T : Animal<T>
{
public Animal(string name) : base(name) { }
}
class Penguin : Animal<Penguin>
{
public Penguin() : base("Penguin") { }
}
class Chimpanzee : Animal<Chimpanzee>
{
public Chimpanzee() : base("Chimpanzee") { }
}
class ZooPen<T> where T : Animal<T>
{
}
class Example
{
void Usage()
{
var penguins = new ZooPen<Penguin>();
var chimps = new ZooPen<Chimpanzee>();
//this line will not compile
//var animals = new ZooPen<Animal>();
}
}
Run Code Online (Sandbox Code Playgroud)
任何维护此代码的人可能会有点困惑,但它确实完全符合您的要求.
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |