显式接口实现背后的基本原理是什么? 它解决了什么问题/特征?
或者,换句话说,为什么.Net设计师在语言中插入显式接口实现?
C#是一种通常会让你很难拍摄的语言":作为一个简单的例子,它强迫你在使用它之前给出一个变量。
显式接口实现方向相反:它可以让您轻松从代码中获得意外结果。 举个例子:
interface IInterface
{
int Compute(List<int> values);
}
class MyClass: IInterface
{
public virtual int Compute(List<int> values)
{
//return count of list, null checks omitted
return values.Count;
}
int IInterface.Compute(List<int> values)
{
// different implemention for Compute
//return count of even numbers within the list, null checks omitted
return values.Where(x => x%2==0).Count();
}
}
public void Test()
{
List<int> values = new List<int>(new int[]{1, 2, 3, 4, 5});
MyClass c = new MyClass();
IInterface i = c; //no need for casting: MyClass implements IInterface
Console.WriteLine("Are they the same object? {0}", object.ReferenceEquals(c, i)); // print true, obviously
int res1 = c.Compute(values);
int res2 = i.Compute(values);
Console.WriteLine($"res1 ={res1}, res2= {res2}"); // ops, different results calling the same method on the same object
// output is: res1 =5, res2= 2
}
我理解为什么它以这种方式运行:如果从IInterface引用调用方法Compute,它会调用显式接口方法。如果从MyClass引用中调用它,则会调用&#34; regular&#34;方法
而且我也明白我应该在方法上委托给另一方(或根本不使用接口实现)。
但为什么语言需要这个奇怪的结构呢?如果它只是在语言中不存在怎么办?