__property属性

时间:2017-03-28 09:28:31

标签: c++-cli managed-c++

我正在将项目从/ oldsyntax转换为/ clr,并且在公共__gc类Reader中转换我的属性时遇到问题,该类现已成为公共ref类Reader

我在.h文件中有这些属性(等等)

__property void set_Xml(System::String *value);
__property System::String *get_Xml();

然后在.cpp文件中我有

void Reader::set_Xml(System::String *value)
{
    if(value->Chars[0] == '<'){
        reader->put_xml(stlString(value).c_str());
    }
    else {
        reader->put_xml_file(stlString(value).c_str());
    }
}

System::String *Reader::get_Xml()
{
    return gcString(reader->get_xml(), reader->state.is_utf8);
}

如何重写它以便可以使用/ clr进行编译。我正在使用Visual Studio 2010?

1 个答案:

答案 0 :(得分:0)

评论中发布的link包含有关属性新语法的所有信息。

  • Old:声明具有特定命名约定的方法,用__property修饰它们。
  • 新增:在类中声明属性块,并使方法具有额外的范围。 (注意:我不确定“额外的范围”是否是描述它的正确方法,见下文。)

对于Xml类型的String属性,语法为:

在头文件中:

public ref class Reader
{
public:
    property String^ Xml
    {  
        String^ get();
        void set(String^ value);
    }
}

在.cpp文件中:

String^ Reader::Xml::get()
{
    return whatever;
}

void Reader::Xml::set(String^ value)
{
    whatever = value;
}