0
給定泛型類的當前結構。該類型必須是可轉換的,才能將其用作通用類中的參數
public abstract class Foo<TFoo, TBar>
where TFoo : Foo<TFoo, TBar>
where TBar : Bar<TFoo, TBar>
{
}
public abstract class Foo<TFoo> : Foo<TFoo, BarImpl>
where TFoo : Foo<TFoo>
{
}
public class FooImpl : Foo<FooImpl>
{
}
public abstract class Bar<TFoo, TBar>
where TFoo : Foo<TFoo, TBar>
where TBar : Bar<TFoo, TBar>
{
}
public abstract class Bar<TFoo> : Bar<TFoo, BarImpl>
where TFoo : Foo<TFoo>
{
}
public class BarImpl : Bar<FooImpl>
{
}
我想什麼是設置默認Bar
上的Foo<TFoo>
每個實現。 在代碼的其他部分,創建了TBar
的實例,如果它是Bar<TFoo>
,則該實例失敗,因爲這是abstract
類。
但是,下面的錯誤被拋出,我不明白我能做什麼或者甚至有可能。
爲了泛型類使用它作爲參數「TBAR」類型「BarImpl」必須轉換爲「酒吧」「富」
我已經嘗試過讓BarImpl
從Bar<FooImpl, BarImpl>
派生這沒有效果。
將其更改爲
public abstract class Foo<TFoo> : Foo<TFoo, Bar<TFoo>>
where TFoo : Foo<TFoo>
{
}
public abstract class Bar<TFoo> : Bar<TFoo, Bar<TFoo>>
where TFoo : Foo<TFoo>
{
}
將會一直工作到Bar<TFoo>
類型的對象intantiated(因爲它的abtract)。
泛型和間接函數的級別可能太多。我讓我的頭腦旋轉,試圖追隨哪種類型繼承或實現,或者是基於還是遵循約束。有沒有可能簡化這個例子? –
Foo不能創建它自己的Bar實例,但是它提供了(構造函數)還是繼承自FooImpl? – Terence
@ LasseV.Karlsen我會很高興有這個簡化,因爲我的頭腦在旋轉,因爲這一天。任何想法將不勝感激。不知道我的問題是否清楚了我想要在這裏實現的目標... – KingKerosin