我不确定为什么我对此代码有以下错误:
“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)中,我需要添加什么参考。
答案 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();