在属性定义中实现

j5j*_*ice 2 c# vb.net

所以我试图将一些VB代码转换为C#.属性定义如下:

Public Overridable ReadOnly Property [Error]() As String Implements System.ComponentModel.IDataErrorInfo.Error
Run Code Online (Sandbox Code Playgroud)

我看到的转换使它看起来像这样:

public virtual string Error
Run Code Online (Sandbox Code Playgroud)

现在我理解这里的一切,除了它忽略了Implements行.这在C#中是不是必要的吗?

D S*_*ley 5

这在C#中是不是必要的吗?

否 - 默认情况下,C#将隐式实现接口. 通常,您可以显式实现接口方法:

string System.ComponentModel.IDataErrorInfo.Error
Run Code Online (Sandbox Code Playgroud)

但在你的情况下,属性是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
Run Code Online (Sandbox Code Playgroud)

  • @ShadowWizard`readonly`用于_fields_ - 对于readonly _property_你只需要实现一个私有的`set`访问器. (3认同)