我想知道在C#.NET中是否有任何類型約束,指出一個類型參數不等於另一個類型參數;這樣的事情...類類型參數的約束要說類型不能相等嗎?
public class FooBar<TA,TB> where TA notequalto TB
我想這樣做的原因是,這樣我可以創建2個加法運算按以下...
public class FooBar<TA,TB> where TA notequalto TB
{
public static TA operator +(TB b, FooBar<TA,TB> fooBar)
{
return fooBar.Foo(b);
}
public static TB operator +(TA a, FooBar<TA,TB> fooBar)
{
return fooBar.Bar(a);
}
public TA Foo(TB b) { ... }
public TB Bar(TA a) { ... }
}
我所面臨的問題是,如果TA = TB,應該調用哪個運算符,因此應該調用Foo()還是Bar(),這將是不明確的。雖然這不是必需的,但我希望能夠實現這一點,如果可能的話...
問題是,有問題的類是一個編解碼器,它包含一個Encode方法和Decode方法,其中提供的2個類型參數是編解碼器使用的類型;換句話說,我們將TA編碼爲TB,或者我們將TB解碼爲TA。我希望實現一個運營商,以便我們可以說「TA = TB +編解碼器」(其將TB解碼爲TA)或「TB = TA +編解碼器」(其將TA編碼爲TB)。當然,提供TA = TB將會「破壞」班級。 –
2014-09-04 11:27:00
我還應該補充說,這個類將成爲其他開發者將使用的庫的一部分,所以我不能確保他們不會使用「TA = TB」。 – 2014-09-04 11:29:57
@ Lee.J.Baxter:在運行時執行這些約束非常容易。不知道,但這和文件應該讓事情變得非常清楚。所有這些都說了,我發現想要使用'TA = TB + Codec'而不是'TA = Codec .Decode(TB)'令人難以置信的混淆;'如果你想能夠連接編碼/解碼,我會(Codec + Codec = Codec '或'Codec .Add(Codec ).Decode(TC)',如果你想要更流暢的東西 –
Brian
2014-09-04 15:14:10