所以我试图将一些VB代码转换为C#.属性定义如下:
Public Overridable ReadOnly Property [Error]() As String Implements System.ComponentModel.IDataErrorInfo.Error
我看到的转换使它看起来像这样:
public virtual string Error
现在我理解这里的一切,除了它忽略了Implements行.这在C#中是不是必要的吗?
这在C#中是不是必要的吗?
否 - 默认情况下,C#将隐式实现接口. 通常,您可以显式实现接口方法:
string System.ComponentModel.IDataErrorInfo.Error
但在你的情况下,属性是virtual这样你不能使用显式实现(显式实现必须是成员private没有意义virtual).
隐式和显式实现的主要区别在于,使用者需要具有接口类型的引用,或者将类转换为接口:
MyDataErrorInfo impl = new MyDataErrorInfo();
string s;
IDataErrorInfo i = new MyDataErrorInfo();   // implicitly cast 
s = i.Error;  // works
s = ((IDataErrorInfo)impl).Error;  // works
s = impl.Error;   // does not work