在C#中,隐式实现成员和显式实现成员之间的区别
在C#中,隐式实现成员和显式实现成员之间的区别
可能重复:
\nC#: 接口-隐式和显式实现\n我在阅读关于接口重新实现的内容。\n我不确定这是什么意思?\n“隐式实现成员和显式实现成员”\n示例代码:\n显式成员实现:\n
public interface IUndoable { void Undo(); } public class TextBox : IUndoable { void IUndoable.Undo() { Console.WriteLine ("TextBox.Undo"); } } public class RichTextBox : TextBox, IUndoable { public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); } }
\n隐式成员实现:\n
public class TextBox : IUndoable { public void Undo() { Console.WriteLine ("TextBox.Undo"); } }
在C#中,显式接口实现允许你实现具有相同签名的不同接口。它还允许你隐藏接口实现(只能通过接口类型的引用访问实现的成员)。
在上述代码中,有两个具有相同签名的Undo()方法。但是当你在文本框变量上键入"."时,两个方法都不可用。你需要将文本框变量转换为显式实现的接口类型:
IUndoable undoable = (IUndoable)textbox; undoable.Undo(); // 现在成员可用
为什么要隐藏一些接口实现?为了使对象的API更清晰。例如,.NET中的List
同样的道理适用于IDisposable - 你可以有一个名为Close的好方法,并显式实现Dispose(它将调用你的Close方法)。API会很清晰 - 只有Close方法可见。但你的对象仍然可以在using块中使用。