【问题标题】:__property to property__财产到财产
【发布时间】:2017-03-28 09:28:30
【问题描述】:

我正在将一个项目从 /oldsyntax 转换为 /clr,但在将我的属性转换为 public __gc class Reader 时遇到了问题,它现在已成为 public ref class 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 吗?

【问题讨论】:

  • 我之前也看过这个链接,但它与我的情况不符。我将尝试仅删除 __property 并将 get_Xml 和 set_Xml 保留为普通方法。
  • 对于托管类,您还需要将 * 替换为 ^
  • 我已将它们改写为 :void set_Xml(System::String^ value);和 System::String^ get_Xml();

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


【解决方案1】:

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

  • 旧:用特定的命名约定声明方法,用__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;
}

【讨论】:

  • 非常感谢。我现在正在重写我所有的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
相关资源
最近更新 更多