在C#中,隐式实现成员和显式实现成员之间的区别

5 浏览
0 Comments

在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"); }
}

0
0 Comments

在C#中,显式接口实现允许你实现具有相同签名的不同接口。它还允许你隐藏接口实现(只能通过接口类型的引用访问实现的成员)。

在上述代码中,有两个具有相同签名的Undo()方法。但是当你在文本框变量上键入"."时,两个方法都不可用。你需要将文本框变量转换为显式实现的接口类型:

IUndoable undoable = (IUndoable)textbox;
undoable.Undo(); // 现在成员可用

为什么要隐藏一些接口实现?为了使对象的API更清晰。例如,.NET中的List隐式实现了IList,但隐藏了非泛型的IList的实现。因此,你可以传递列表到期望非泛型IList的地方,但非泛型方法(如Add(object value))不会污染漂亮的泛型接口。

同样的道理适用于IDisposable - 你可以有一个名为Close的好方法,并显式实现Dispose(它将调用你的Close方法)。API会很清晰 - 只有Close方法可见。但你的对象仍然可以在using块中使用。

0