簡體   English   中英

默認實現的接口方法可以在class中隱式實現嗎?

[英]Can the interface method with default implementation be implemented implicitly in a class?

只是代碼:

public interface ICalculator
{
    public double Calculate(double x) => x + 5;
}

public class Calculator: ICalculator
{
}

public static class Program
{
    static void Main()
    {
        ICalculator calculator = new Calculator();
        Console.WriteLine("Calculate(2) = {0}", calculator.Calculate(2));
    }
}

它工作正常,因為Calculate方法是顯式實現的。 calculatorICalculator類型,所以一切正常。 但是如果我將calculator的類型更改為Calculator ,我會得到錯誤:

        // Was: ICalculator calculator = new Calculator();
        Calculator calculator = new Calculator();
        Console.WriteLine("Calculate(2) = {0}", calculator.Calculate(2));

[CS1061] “計算器”不包含“計算”的定義,並且找不到接受“計算器”類型的第一個參數的可訪問擴展方法“計算”(是否缺少程序集引用的 using 指令?)。

我知道這是因為Calculate方法是在 class 中明確實現的,所以

public class Calculator: ICalculator
{
}

真正意思:

public class Calculator: ICalculator
{
    double ICalculator.Calculate(double x) => x + 5;
}

我只是想知道 class 是否可以隱式實現這種方法? 我無法用谷歌搜索答案。

在這些場景中,我總是使用這樣的基本抽象 class:

public interface ICalculator
{
    double Calculate(double x);
}

public abstract class BaseCalculator : ICalculator
{
    public virtual double Calculate(double x) => x + 5;
}

public class Calculator : BaseCalculator { }

這段代碼會很好:

Calculator calculator = new Calculator();
Console.WriteLine("Calculate(2) = {0}", calculator.Calculate(2));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM