![](/img/trans.png)
[英]Why is an explicitly implemented interface method called with callvirt and an implicitly implemented not?
[英]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
方法是顯式實現的。 calculator
有ICalculator
類型,所以一切正常。 但是如果我將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.