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/描述) –