C++/CLI 简写属性

23

开发人员要如何在托管的C++中执行与此等效的操作?:

C# 代码

public String SomeValue
{
  get;
  set;
}

我已经搜遍了网络并找到一些解决方案,但是由于getter/setter和Managed C++的丰富历史,很难区分哪种是正确的(最新的.NET 3.5)方式。

谢谢!


Managed C++已经过时,C++/CLI是当前的方法。 - Daniel A. White
2
抱歉,我正在使用C++/CLI。 我仍在使用旧名称:( - DanDan
2
DanDan:C++/CLI 是一门完全不同的语言。虽然它是 Managed C++ 的继承者,但 Managed C++ 并不是它的旧名称。 - Mehrdad Afshari
我会确保在正确的语言中使用正确的名称。 - DanDan
3个回答

38

Managed C++不支持自动属性。您应该手动声明一个后备字段和访问器:

private: String* _internalSomeValue;
public:
__property String* get_SomeValue() { return _internalSomeValue; }
__property void set_SomeValue(String *value) { _internalSomeValue = value; }

C++/CLI 支持自动属性,语法非常简单:

public: property String^ SomeValue;

更新(回复评论):

在C++/CLI中,当您使用自动属性语法时,无法单独控制每个访问器方法的可访问性。您需要自己定义后备字段和方法:

private: String^ field;
property String^ SomeValue { 
   public: String^ get() { return field; }
   private: void set(String^ value) { field = value; }
}

7
在C++/CLI版本中,我该如何将setter设置为私有的? - DanDan

20

在C++/CLI中,你只需要这样做:

property String^ SomeValue;

4

为了给您提供更多搜索词,这被称为琐碎属性


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接