IDataErrorInfo.这个[string propertyName]在C#中是如何工作的?

IDataErrorInfo.这个[string propertyName]在C#中是如何工作的?,c#,wpf,idataerrorinfo,C#,Wpf,Idataerrorinfo,我一直在实现这个接口,但实际上并不想知道这一行的含义以及它是如何工作的 string IDataErrorInfo.this[string propertyName] { get { return this.GetValidationError(propertyName); } } .this[string propertyName]如何工作,以及何时/如何调用此属性?这是一个重要问题。(编辑:签名的IDataErrorInfo.部分表示显式接口实现,而部分表示索引器。) 只要您有一个

我一直在实现这个接口,但实际上并不想知道这一行的含义以及它是如何工作的

string IDataErrorInfo.this[string propertyName]
{
    get { return this.GetValidationError(propertyName); }
}
.this[string propertyName]
如何工作,以及何时/如何调用此属性?

这是一个重要问题。(编辑:签名的
IDataErrorInfo.
部分表示显式接口实现,而
部分表示索引器。)

只要您有一个显式键入的
IDataErrorInfo
对象,并且在传入字符串时使用方括号检索/获取值,就会调用它。例如:

IDataErrorInfo myDataErrorInfo = GetErrorInfo();
string myPropertyError = myDataErrorInfo["SomePropertyName"];
请注意,由于它是一个显式接口实现,因此只有当类型确切地称为
IDataErrorInfo
时,才可以访问它。如果将其类型化为子类,则除非该类公开它,否则无法访问它:

MyDataErrorInfoImpl myDataErrorInfo = GetErrorInfo();
string myPropertyError = myDataErrorInfo["SomePropertyName"]; //compiler error!

这个[key]
实际上是一个索引器,在某种程度上是属性和方法的交叉。它的行为类似于属性,因为您可以绑定到它,但与常规属性相反,它接收一个参数

在幕后,它被实现为一种方法-
get\u Item(key)
,如果您想通过反射访问它,您需要使用
Item
作为名称。例如:

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

在实现
INotifyPropertyChanged
时,了解这一点也很重要,在这种情况下,
“项[]”
绑定。IndexerName
应该用作属性名,以便更新UI。

我认为这是一个属性名,当您有一个显式键入的
IDataErrorInfo
对象时,就会调用它,您可以在其中写入:
字符串myPropertyError=myDataErrorInfo[“SomePropertyName”]是的,这只是显式的接口实现。你一般都知道吗?(如果没有,就查一下。)@JonSkeet我对显式实现接口意味着什么有一个大致的了解(我不久前在Programmers.SE上提到过),但是
。这个[string propertyName]
是我不太理解的主要部分。很抱歉,我在我的帖子中不是很清楚。我更感兴趣的是了解
。这个[string propertyName]
是如何工作的,您提到的是一个索引器。我现在正在查找:)我确实理解隐式接口和显式接口。@Rachel啊,我已经编辑了我的答案,以明确签名的哪一部分涉及显式接口实现和索引器。编辑:索引器本质上允许您实现数组样式的方括号语法,但允许您使用除
int
之外的任何类型。它们的行为与属性/方法一样,并遵循重载/重写/new/virtual/abstract/等相同的规则。谢谢。我在谷歌上搜索“what does.this[string propertyName]的意思”的变体时遇到了困难,无法找到它的实际含义。现在我知道它被称为索引器,我可以更轻松地找到有关它的资料:)