0
我必須在某些類型的對象上添加Diff
功能。我想提出一個界面,它將定義能夠將自己與其他相同類型的對象進行比較的對象。我們稱之爲IDiffable
。現在我們可以在接口定義中引用具體類型(不管它們可能是什麼)嗎?
interface IDiffable
{
DiffDetails CompareWith(object other);
}
的問題是,在CompareWith
方法用戶可以在任何類型包括實現IDiffable的那些,並且不需要的那些通過。所以讓我們將它們限制爲實現IDiffable的那些。
interface IDiffable
{
DiffDetails CompareWith(IDiffable other);
}
現在剩下的只是拼圖的最後一塊,用戶仍然可以通過在不同類型的不是一個呼叫正在以取得的對象。我如何限制?
這是我想要防止的一個例子。
internal class TypeA : IDiffable
{
internal DiffDetails CompareWith(IDiffable obj)
{
// compare here
}
}
internal class TypeB : IDiffable
{
internal DiffDetails CompareWith(IDiffable obj)
{
// compare here
}
}
我想避免以下
var a = new TypeA();
var b = new TypeB();
var diff = a.CompareWith(b); // incorrect usage, how to avoid this?
我想只允許以下
var a = new TypeA();
var b = new TypeB();
var another_a = new TypeA();
var diff = a.CompareWith(another_a); // Correct usage
什麼你要找的是埃裏克利珀在[奇妙而又奇妙(https://blogs.msdn.microsoft.com/ericlippert/2011/02/03/curiouser-and-curiouser/描述) –