C# 接口问题
我有以下代码:
// IMyInterface.cs
namespace InterfaceNamespace
{
interface IMyInterface
{
void MethodToImplement();
}
}
.
// InterfaceImplementer.cs
class InterfaceImplementer : IMyInterface
{
void IMyInterface.MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
这段代码编译得很好(为什么?)。但是,当我尝试使用它时:
// Main.cs
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
}
我得到:
InterfaceImplementer 不包含“MethodToImplement”的定义
即 MethodToImplement
从外部是不可见的。但如果我进行以下更改:
// InterfaceImplementer.cs
class InterfaceImplementer : IMyInterface
{
public void MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
那么 Main.cs 也可以正常编译。为什么这两者之间有区别?
I have the following code:
// IMyInterface.cs
namespace InterfaceNamespace
{
interface IMyInterface
{
void MethodToImplement();
}
}
.
// InterfaceImplementer.cs
class InterfaceImplementer : IMyInterface
{
void IMyInterface.MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
This code compiles just fine(why?). However when I try to use it:
// Main.cs
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
}
I get:
InterfaceImplementer does not contain a definition for 'MethodToImplement'
i.e. MethodToImplement
is not visible from outside. But if I do the following changes:
// InterfaceImplementer.cs
class InterfaceImplementer : IMyInterface
{
public void MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
Then Main.cs also compiles fine. Why there is a difference between those two?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
通过显式实现接口,您正在创建一个私有方法,该方法可以只能通过转换到接口来调用。
By implementing an interface explicitly, you're creating a private method that can only be called by casting to the interface.
不同之处在于支持接口方法与另一个方法冲突的情况。引入了“显式接口实现”的思想。
您的第一次尝试是显式实现,它需要直接使用接口引用(而不是对实现该接口的内容的引用)。
您的第二次尝试是隐式实现,它也允许您使用实现类型。
要查看显式接口方法,请执行以下操作:
如果您随后满足以下条件:
类型系统可以在正确的类型上找到相关方法而不会发生冲突。
The difference is to support the situation where an interface method clashes with another method. The idea of "Explicit Interface Implementations" was introduced.
Your first attempt is the explicit implementation, which requires working directly with an interface reference (not to a reference of something that implements the interface).
Your second attempt is the implicit implementation, which allows you to work with the implementing type as well.
To see explicit interface methods, you do the following:
Should you then have the following:
The type system can find the relevant methods on the correct type without clashing.
如果要实现类的接口,那么接口中的方法必须存在于类中,并且所有方法也应该是公共的。
你可以这样调用该方法
if you are implementing an interface to a class then the methods in interface must be there in class and all methods should be public also.
and you can call the method like this