我不确定为什么我对这段代码有以下错误:
“IClass 不包含 method_name 的定义,也没有扩展方法“method_name”接受第一类型 IClass 的参数(您是否缺少 ref/assembly)”
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”接受第一种类型的参数......
我可以知道为什么会这样吗?我认为如果对象继承接口(interface),我们将能够将对象引用到接口(interface)类型。这是 SOLID 方法的一部分,不是吗?
例如,如果我的界面在同一个文件 (file.cs) 中,我需要添加什么引用。
最佳答案
A.method_name()
将失败并返回 CS0120:
An object reference is required for the non-static field, method, or property 'A.method_name()'
这是因为 method_name()
是一个实例方法,所以它需要知道您打算在哪个对象上调用该方法。 A.method_name()
是调用static
方法的语法(没有this
)。
假设(根据您报告的消息)您实际上是指 cal.method_name()
,编译器是正确的:method_name
仅在 A 上定义
,但您的变量属于 IClass
类型,因此只有 已知属于 IClass
的成员可用。实例 是 A
的事实无关紧要:您正在为 IClass
契约(Contract)工作;唯一可用的方法是 Calculate()
,因为 IClass
宣传了它。如果您想保留对 A
的所有功能的访问权限:不要将局部变量键入为 IClass
:
A cal;
cal = new A();
cal.method_name();
或
var cal = new A();
cal.method_name();
关于c# - IClass 不包含 method_name 的定义,也没有扩展方法 method_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48501598/