通用约束和继承

时间:2014-04-08 14:33:11

标签: c# generics inheritance

我有这种情况:

class A<T> 

我想要像

这样的人类约束
class A<T> where T: Person

我希望A也从B继承。

示例:

class A<T> : B : where T: Person

class A<T> where T: Person,  B

我该怎么办?

4 个答案:

答案 0 :(得分:3)

class A<T> : B where T : Person

答案 1 :(得分:1)

您是否在询问如何在C#中表达此结构?如果是这样的话:

class Program
{
    static void Main(string[] args)
    {
        B a1 = new A<Person>();
        B a2 = new A<ChildPerson>();
    }
}
class Person
{
}

class ChildPerson : Person
{
}

class A<T> : B where T: Person
{
}

class B
{
}

答案 2 :(得分:1)

您无法从C#中的多个类继承。所以你可以拥有

A<T>继承自BTPersonPerson接口):

class A<T>: B where T: Person {
  ...
}

A<T>不需要继承B;但是T继承自B并且实施PersonPerson只能接口):

class A<T> where T: Person, B {
  ...
}

似乎你想要案例1:

// A<T> inherites from B; 
// T is restricted as being Person (Person is a class or interface)
class A<T>: B where T: Person {
  ...
}

答案 3 :(得分:0)

C#中没有多重继承,因此您无法强制类型继承多个类。

听起来你的结构不正确。

为了确保两者都是实现的,其中一个必须是一个接口,或者其中一个必须实现另一个接口。

如果你的意思是T可以实现B或Person,那么应该有一些抽象的基类/接口,B和Person共享你限制的那个