2014-04-08 41 views
1

我有這樣的場景:兩個通用約束和繼承

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 

我該怎麼辦呢?

+2

我希望我的編輯是正確的,但你的原題我好疑惑。它看起來並不像你想要的那樣'或',而是你想要*繼承和約束。 –

回答

3
class A<T> : B where T : Person 
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 
{ 
} 
+0

很好的例子,包括'ChildPerson'類的插圖。也許只是爲了清楚起見,添加一個註釋,您只是爲了說明而添加了該類;所要求的功能不是必需的嗎? –

0

有一個在C#多重繼承,所以你不能強制執行一類從多個類繼承。

聽起來像你的結構不正確。

爲確保兩者都實現,其中一個必須是接口,或者其中一個必須實現另一個。

如果你的意思是T能夠實現B或人的話,那麼就應該有一些抽象基類/接口,B和人分享你限制到

+0

我不是指多重繼承只是泛型的約束,而....從其他類繼承 – Zinov

1

不能從不止一個繼承在C#中的類。所以,你可以有從B

A<T> inherites和TPersonPerson要麼類或接口):

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

A<T>不會B必要inherites;但是從BT inherites並實現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 { 
    ... 
} 
+0

我不是指多重繼承只是泛型類型的約束,而....從其他類 – Zinov