3 回答

TA貢獻1816條經驗 獲得超6個贊
如果您使用相同的方法和不同的實現(xiàn)來實現(xiàn)兩個接口,則必須顯式實現(xiàn)。
public interface IDoItFast
{
void Go();
}
public interface IDoItSlow
{
void Go();
}
public class JustDoIt : IDoItFast, IDoItSlow
{
void IDoItFast.Go()
{
}
void IDoItSlow.Go()
{
}
}

TA貢獻1846條經驗 獲得超7個贊
隱藏非首選成員很有用。例如,如果您同時實現(xiàn)這兩種方法IComparable<T>,IComparable通常最好隱藏隱藏的IComparable重載,以免給人以為您可以比較不同類型的對象。同樣,某些接口(例如)也不符合CLS IConvertible,因此,如果您未明確實現(xiàn)該接口,則要求CLS符合性的語言的最終用戶將無法使用您的對象。(如果BCL實現(xiàn)者沒有隱藏原語的IConvertible成員,那將是災難性的:)
另一個有趣的注釋是,通常使用這樣的構造意味著顯式實現(xiàn)接口的構造只能通過對接口類型進行裝箱來調用它們。您可以使用通用約束來解決此問題:
void SomeMethod<T>(T obj) where T:IConvertible
將int傳遞給int時,它不會裝箱。

TA貢獻1825條經驗 獲得超6個贊
明確實現(xiàn)接口的一些其他原因:
向后兼容性:萬一ICloneable接口發(fā)生變化,實現(xiàn)方法類成員不必更改其方法簽名。
更干凈的代碼:如果將Clone方法從ICloneable中刪除,則會出現(xiàn)編譯器錯誤,但是,如果隱式實現(xiàn)該方法,則可能會得到未使用的“孤立”公共方法
強類型化:為了舉例說明超級貓的故事,這將是我的首選示例代碼,當您直接將其作為實例成員調用時,ICloneable顯式實現(xiàn)允許Clone()強類型化MyObject:
public class MyObject : ICloneable
{
public MyObject Clone()
{
// my cloning logic;
}
object ICloneable.Clone()
{
return this.Clone();
}
}
- 3 回答
- 0 關注
- 665 瀏覽
添加回答
舉報