我有這樣的場景:兩個通用約束和繼承
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
我該怎麼辦呢?
我有這樣的場景:兩個通用約束和繼承
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
我該怎麼辦呢?
class A<T> : B where T : Person
你問的是如何在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
{
}
很好的例子,包括'ChildPerson'類的插圖。也許只是爲了清楚起見,添加一個註釋,您只是爲了說明而添加了該類;所要求的功能不是必需的嗎? –
有一個在C#多重繼承,所以你不能強制執行一類從多個類繼承。
聽起來像你的結構不正確。
爲確保兩者都實現,其中一個必須是接口,或者其中一個必須實現另一個。
如果你的意思是T能夠實現B或人的話,那麼就應該有一些抽象基類/接口,B和人分享你限制到
我不是指多重繼承只是泛型的約束,而....從其他類繼承 – Zinov
不能從不止一個繼承在C#中的類。所以,你可以有從B
A<T>
inherites和T
是Person
(Person
要麼類或接口):
class A<T>: B where T: Person {
...
}
A<T>
不會B
必要inherites;但是從B
T
inherites並實現Person
(Person
可以接口只):
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 {
...
}
我不是指多重繼承只是泛型類型的約束,而....從其他類 – Zinov
我希望我的編輯是正確的,但你的原題我好疑惑。它看起來並不像你想要的那樣'或',而是你想要*繼承和約束。 –