我有一個樹型的類Foo<T>
與它的接口IFoo<T>
。我有一個類A <T>:IEnumerable <T>,我想添加IEquatable <A<T>>如果T:IEquatable <T>。我該怎麼做,並保持IEnumerable呢?
我想Foo<T>
能夠實現IEquatable<Foo<T>>
時T : IEquatable<T>
(或者更一般地,如果T : I<T>
我可能會在另外的其他實現的接口要Foo<T> : I<Foo<T>>
)。
我試圖僞下面的代碼:
public interface IFoo<T> : IEnumerable<IFoo<T>>
...
public class Foo<T> : IFoo<T>
...
public interface IFooTwo<T> : IFoo<T>, IEquatable<IFooTwo<T>>
where T : IEquatable<T>
...
public class FooTwo<T> : IFooTwo<T> {
... // I implement Equals
public bool NewMethod(FooTwo<T> Other) { ... }
}
所以,現在我已成功實施Equals
(我也overrided的geniric平等相待,等等)。
但FooTwo<T>
現在不執行IEnumerable<IFooTwo<T>>
(而是它實現IEnumerable<IFoo<T>>
)。
所以我有兩個問題:
- 有沒有更好的辦法,我來組織我的代碼以實現我的目標(如果
T : IEquatable<T>
我希望能夠實現IEquatable<Foo<T>>
爲Foo<T>
)?一種有條件的where
。 - 如何使用
Foo<T> IEnumerable
快速輕鬆地實現FooTwo<T>
implementsIEnumerable <FooTwo<T>>
?
編輯:
在IEquatable<Foo<T>>
的特殊情況下,我有疑問1.一個簡單的答案我可以測試是否T:IEquatable<T>
並根據需要更改我的執行IEquatable<Foo<T>>
。不過,我仍然想知道如何在更一般的情況下做到這一點。
你如何重新實現'IEnumerable>'而不是'IEnumerable >'? –
你是對的,編輯 –
**請**注意編輯問題時的預覽窗格,尤其是當您試圖討論泛型類型參數時。我已經修復了一次你的代碼,我沒有心情再次爲你的修改做這件事(請嘗試閱讀,因爲它目前顯示,並看看它有多少意義) –