IClass不包含method_name的定义,也没有扩展方法method_name

时间:2018-01-29 12:44:27

标签: c# interface solid-principles

我不确定为什么我对此代码有以下错误:

“IClass不包含method_name的定义,也没有扩展方法”method_name“接受第一类IClass的参数(你缺少参考/汇编)”

interface IClass
{
   void Calculate();
}

class A : IClass
{
  public A()
  {
  }

  public void Calculate()
  {
    ...
  }

  public void method_name()
  {
    ... 
  }    
}

class MainClass
{
    public static void Main(string[] args)
    {
        IClass cal;
        cal = new A();
        A.method_name();
    }
}

错误发生在A.method_name();我得到错误,说“IClass”不包含“method_nam”的定义,并且没有扩展方法“method_name”接受第一类型的参数...

我可以知道为什么会这样吗?我认为如果对象继承接口,我们将能够将对象引用到接口类型。这是SOLID方法的一部分不是吗?

如果我的界面位于同一个文件(file.cs)中,我需要添加什么参考。

1 个答案:

答案 0 :(得分:3)

A.method_name()将因CS0120而失败:

  

非静态字段,方法或属性'A.method_name()'

需要对象引用

这是因为method_name()是一个实例方法,因此它需要知道您打算在哪个对象上调用该方法。 A.method_name()是调用static方法的语法(没有this)。

假设(基于您报告的消息)您实际意味着cal.method_name(),编译器是正确的:method_name仅在A上定义,但您的变量类型为{{ 1}},因此只有IClass 上的成员可用。实例 IClass这一事实无关紧要:您正在致力于A合同;唯一可用的方法是IClass,因为Calculate()会对此进行广告宣传。如果您想保留对IClass的所有功能的访问权限:请勿将本地变量键入A

IClass

A cal;
cal = new A();
cal.method_name();