views:

429

answers:

3

Hello, How does a developer do the equivalent of this in managed c++? :

c# code

public String SomeValue
{
  get;
  set;
}

I've scoured the net and found some solutions, however it is hard to distinguish which is the correct (latest, .NET 3.5) way, given the colourful history of getters/setters and managed c++.

Thanks!

+3  A: 

Managed C++ does not support automatic properties. You should manually declare a backing field and the accessors:

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

C++/CLI supports automatic properties with a very simple syntax:

public: property String^ SomeValue;

Update (reply to comment):

In C++/CLI, you cannot control the accessibility of each accessor method separately when you use the automatic property syntax. You need to define the backing field and the methods yourself:

private: String^ field;
property String^ SomeValue { 
   public: String^ get() { return field; }
   private: void set(String^ value) { field = value; }
}
Mehrdad Afshari
In the C++/CLI version, how would I make the setter private, for example?
DanDan
Thank you for the information, you have been most helpful.
DanDan
+2  A: 

In C++/CLI you would do just:

property String^ SomeValue;
Bojan Resnik
+1  A: 

Just to give you more search terms, this is called a trivial property

FocusStealer