为什么显式接口实现

时间:2018-03-24 16:31:37

标签: c# .net language-design

显式接口实现背后的基本原理是什么? 它解决了什么问题/特征?

或者,换句话说,为什么.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;方法

而且我也明白我应该在方法上委托给另一方(或根本不使用接口实现)。

但为什么语言需要这个奇怪的结构呢?如果它只是在语言中不存在怎么办?

0 个答案:

没有答案