c#接口问题
我有以下代码:c#接口问题,c#,inheritance,interface,C#,Inheritance,Interface,我有以下代码: // IMyInterface.cs namespace InterfaceNamespace { interface IMyInterface { void MethodToImplement(); } } 这段代码编译得很好(为什么?)。但是,当我尝试使用它时: // Main.cs static void Main() { InterfaceImplementer iImp = new Inte
// IMyInterface.cs
namespace InterfaceNamespace
{
interface IMyInterface
{
void MethodToImplement();
}
}
这段代码编译得很好(为什么?)。但是,当我尝试使用它时:
// Main.cs
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
}
我得到:
i、 e.MethodToImplement
从外部看不到。但如果我做了以下改变:
// InterfaceImplementer.cs
class InterfaceImplementer : IMyInterface
{
public void MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
那么Main.cs也可以很好地编译。为什么这两者之间存在差异?通过,您正在创建一个只能通过强制转换到接口来调用的私有方法。区别在于支持一个接口方法与另一个方法冲突的情况。引入了“显式接口实现”的思想 您的第一次尝试是显式实现,它需要直接使用接口引用(而不是实现接口的某个对象的引用) 您的第二次尝试是隐式实现,它也允许您使用实现类型 要查看显式接口方法,请执行以下操作:
MyType t = new MyType();
IMyInterface i = (IMyInterface)t.
i.CallExplicitMethod(); // Finds CallExplicitMethod
IMyOtherInterface oi = (MyOtherInterface)t;
oi.CallExplicitMethod();
那么,您是否应该具备以下条件:
MyType t = new MyType();
IMyInterface i = (IMyInterface)t.
i.CallExplicitMethod(); // Finds CallExplicitMethod
IMyOtherInterface oi = (MyOtherInterface)t;
oi.CallExplicitMethod();
类型系统可以找到正确类型上的相关方法,而不会发生冲突。如果要实现类的接口,则接口中的方法必须在类中,并且所有方法也应该是公共的
class InterfaceImplementer : IMyInterface
{
public void MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
你可以这样调用这个方法
IMyInterface _IMyInterface = new InterfaceImplementer();
IMyInterface.MethodToImplement();
+答案是1,但我有一个问题……不起作用的实现者将接口实现为“void InterfaceNamespace.MethodToImplement”。你能帮我弄清楚它实际上在做什么吗?是Namespace.InterfaceMethodName而不是Namespace.Interface.InterfaceMethodName…我还在睡觉吗?@Craig:我也在想,这没有意义,也不会编译,这可能是个错误。@H.B.对,当然不会编译了…谢谢,我想我可能是在做梦。您将获得is名称空间,但其使用方式类似于类型错误。可能只是你说的典型。不确定您是否应该在该上下文中使用“private”一词。
此代码编译得很好
,没有<代码>“InterfaceNamespace”是一个“名称空间”,但与“类型”一样使用。。为简单和隐私起见,对代码的某些部分进行了修改/重命名。当复制粘贴时,有问题的示例代码可能不起作用,但它解释了问题,但不要声称它起作用!(我修正了错误…)