gpt4 book ai didi

c# - 无法将 C# 代码移植到实现 IDataErrorInfo 的托管 C++

转载 作者:行者123 更新时间:2023-11-30 04:22:45 24 4
gpt4 key购买 nike

这部分。注释代码是cs。在编译时捕获错误:

Error   78
error C3766: 'Sample::NoteInfo' must provide an implementation for the interface method 'System::String ^System::ComponentModel::IDataErrorInfo::default::get(System::String ^)'
d:\dev\docstreet\sample\pointInfoStoreClass.h 100

哪里不对?为什么 VS 编译器认为这没有实现?

//Returns an error description set for the item's property
//String^ IDataErrorInfo.this[String^ columnName] {
// get {
// return GetColumnError(columnName);
// }
//}

public: property String^ IDataErrorInfo[String^] {
virtual String^ get(String^ index) override {
return GetColumnError(index);
}
}

完整代码:

public ref class NoteInfo : IDataErrorInfo {
int fDay;
int fMonth;
int fYear;
int fNoteID;
//References the item's owner
ProjectNotes^ owner;
//Stores error descriptions for the Day, Month, Year and NoteID properties
Hashtable^ propertyErrors;
//Stores an error description for the item
String^ fNoteError;


public: NoteInfo(int noteID, int day, int month, int year) {
fNoteID = noteID;
fDay = day;
fMonth = month;
fYear = year;
//Set errors to empty strings
propertyErrors = gcnew Hashtable();
propertyErrors->Add('Day', '');
propertyErrors->Add('Month', '');
propertyErrors->Add('Year', '');
propertyErrors->Add('NoteID', '');
fNoteError = '';
Owner = nullptr;
}

public: property int NoteID {
int get() { return fNoteID; }
void set(int value) {
if(fNoteID == value) return;
fNoteID = value;
}
}

public: void ClearErrors() {
SetColumnError('Day', '');
SetColumnError('Month', '');
SetColumnError('Year', '');
fNoteError = '';
}

//Sets an error for an item's property
public: void SetColumnError(String^ elem, String^ error) {
if(propertyErrors->ContainsKey(elem)) {
if((String^)propertyErrors[elem] == error) return;
propertyErrors[elem] = error;
}
}

//Gets an error for an item's property
public: String^ GetColumnError(String^ elem) {
if(propertyErrors->ContainsKey(elem))
return (String^)propertyErrors[elem];
else
return '';
}

//The owner collection
internal: property ProjectNotes^ Owner {
ProjectNotes^ get() { return owner; }
void set(ProjectNotes^ value) { owner = value; }
}


#pragma region IDataErrorInfo Members

//Returns an error description set for the item's property
//String^ IDataErrorInfo.this[String^ columnName] {
// get {
// return GetColumnError(columnName);
// }
//}

public: property String^ IDataErrorInfo[String^] {
virtual String^ get(String^ index) override {
return GetColumnError(index);
}
}

//Returns an error description set for the current item
public: property String^ Error {
virtual String^ get() { return fNoteError; }

}
#pragma endregion
};

最佳答案

C# 和 C++/CLI 语言都需要一个类的索引器的特殊名称,以允许编译器将其识别为索引器。 C# 使用 this,C++/CLI 使用 default 关键字。 MSDN 库将其称为“Item”以增加混淆,这在某种程度上是不可避免的,因为名称取决于语言。所以它必须看起来像这样:

public: property String^ default[String^] {
virtual String^ get(String^ index) {
// etc...
}
}

关于c# - 无法将 C# 代码移植到实现 IDataErrorInfo 的托管 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com