5

我一直在实现IDataErrorInfo接口,但实际上并不想知道这条线是什么意思以及它是如何工作的。

string IDataErrorInfo.this[string propertyName]
{
    get { return this.GetValidationError(propertyName); }
}

如何.this[string propertyName]工作,以及何时/如何调用此属性?

4

2 回答 2

8

这是indexer显式接口实现。(编辑:签名部分表示显式接口实现,部分表示索引器。)IDatatErrorInfo..this[...]

只要你有一个明确类型的IDataErrorInfo对象并且你在它上面使用方括号来检索/获取一个值,同时传入一个字符串,它就会被调用。例如:

IDataErrorInfo myDataErrorInfo = GetErrorInfo();
string myPropertyError = myDataErrorInfo["SomePropertyName"];

请注意,由于它是一个显式接口实现,因此只有当类型被准确地称为IDataErrorInfo. 如果您将其键入为子类,则除非该类公开它,否则它将无法访问:

MyDataErrorInfoImpl myDataErrorInfo = GetErrorInfo();
string myPropertyError = myDataErrorInfo["SomePropertyName"]; //compiler error!
于 2013-06-21T13:35:12.610 回答
3

this[key]实际上是一个索引器,并且在某种程度上是属性和方法之间的交叉。它就像一个属性,因为您可以绑定到它,但与常规属性相反,它接收一个参数。

在幕后它被实现为一个方法 - get_Item(key),如果你想通过反射访问它,你需要使用Item一个名称。例如:

typeof(MyClass).GetProperty("Item");

在实现时了解这一点也很重要INotifyPropertyChanged,在这种情况下,"Item[]"或者Binding.IndexerName应该用作属性名称以更新 UI。

于 2013-06-21T13:45:07.927 回答