泛型类型,其类型参数是抽象基类

戴维·RR

比方说,我有一个基类命名Animal和两个派生类命名LionTiger而且我也想有一个通用类型,名为AnimalList<Animal>来包含的成员Animal例如:

var list = new AnimalList<Animal>();

list.Add(new Lion());
list.Add(new Tiger());

到目前为止非常简单,但是有一个问题……我希望基类Animal成为abstract也就是说,我不想允许创建基类的实例。但是,使基类抽象化不会令人惊讶地导致错误CS0310(请参见下面的完整示例)。

我确实提出了一个解决方案:根据需要使基类成为非抽象类,并仅从默认(无参数)构造函数中引发异常:

public Animal()
{
    throw new System.NotImplementedException();
}

但是,这让我感到有些不安。有没有更好的办法?


这是一个完整的示例,说明了我上面描述的场景:

// public class Animal {}        // OK
public abstract class Animal {}  // 'abstract' keyword causes error 'CS0310'

public class Lion : Animal {}
public class Tiger : Animal {}

public class AnimalList<T> :
    Animal
    where T : Animal, new()
{
    public void Add(T animal) {}
}

class AnimalListDemo
{
    static public void Main(string[] args)
    {
        // The following statement causes:
        // error CS0310 - 'Animal' 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 'AnimalList<T>'

        var list = new AnimalList<Animal>();

        list.Add(new Lion());
        list.Add(new Tiger());
    }
}
杰罗恩·范内维尔(Jeroen Vannevel)

只需删除new()约束。它要求您提供一个可以实例化的类new()(这就是要求的全部内容),但是抽象类显然不能做到这一点。

MSDN

新约束指定通用类声明中的任何类型参数都必须具有公共的无参数构造函数。要使用新的约束,类型不能为abstract

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

new()的泛型类型约束和抽象基类

来自分类Dev

在泛型类型的泛型类上访问类型参数

来自分类Dev

获取抽象超类上泛型类型参数的实际类型

来自分类Dev

Kotlin抽象类,具有泛型参数和使用类型参数的方法

来自分类Dev

在泛型类隐式类型参数

来自分类Dev

强制泛型类型参数为类类型?

来自分类Dev

从泛型类型类确定方法参数类型

来自分类Dev

Scala:引用类的嵌套类型,它是泛型的类型参数

来自分类Dev

泛型java函数使用的“类型参数”的“类类型”

来自分类Dev

继承需要构造函数的泛型类型的抽象类

来自分类Dev

泛型类型可以实现多个抽象类吗?

来自分类Dev

继承需要构造函数的泛型类型的抽象类

来自分类Dev

打字稿类型、泛型和抽象类

来自分类Dev

C#/。Net泛型如何知道其参数类型?

来自分类Dev

如何在基类的方法中使用泛型指定out参数的类型?

来自分类Dev

使用类的实例获取类的泛型类型参数的数量?

来自分类Dev

泛型类型参数C#-如何泛型类返回类型

来自分类Dev

如何找出类型是否实现泛型基类

来自分类Dev

如何找出类型是否实现泛型基类

来自分类Dev

从参数推断泛型类型

来自分类常见问题

从泛型类中的类型参数创建新对象

来自分类Dev

泛型类型参数范围和具体类

来自分类Dev

泛型方法从超类获取参数类型

来自分类Dev

具有类参数的泛型类型推断

来自分类Dev

检查泛型参数类型是否从某个类X派生

来自分类Dev

泛型类作为带有内部类型的参数

来自分类Dev

Java泛型-参数化的类与类型化方法

来自分类Dev

Spring 4泛型类,获取参数化类型

来自分类Dev

是否可以重用某个类的泛型的类型参数

Related 相关文章

热门标签

归档