无法将C#代码移植到实现IDataErrorInfo的托管C ++ [英] Can't port C# code to managed C++ implementing IDataErrorInfo

查看:47
本文介绍了无法将C#代码移植到实现IDataErrorInfo的托管C ++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这部分.注释的代码是cs.
在编译时捕获错误:
错误78错误C3766:``Sample :: NoteInfo''必须为接口方法``System :: String ^ System :: ComponentModel :: IDataErrorInfo :: default :: get(System :: String ^)''提供实现d:\ dev \ docstreet \ sample \ pointInfoStoreClass.h 100

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

This part. Commented code is cs.
On compile catch an error:
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

What''s incorrect? Why VS compiler consider this not implemented?

#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);
            }
        }


完整代码:


Full code:

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
    };

推荐答案

找到了解决方法

Found the solution

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


这篇关于无法将C#代码移植到实现IDataErrorInfo的托管C ++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆