プロパティのアクセス指定子

 なんとなく誤解されている方がいるので
 C++/CLI ではプロパティは setter, getter ごとにアクセスのレベルを指定できます。

ref class Clazz1
{
private:
    int _value;

public:
    Clazz1() : _value(0) {}

    property int Value
    {
        int get()
        {
            return this->_value;
        }
    protected:
        void set(int value)
        {
            this->_value = value;
        }
    }
    int _Data;
};

int main(array ^args)
{
    Clazz1 cls;
    cls.Value = 5;  // <- これがコンパイル・エラー
    cls._Data = 10;
    Console::WriteLine(cls.Value);
    return 0;
}

 上のサンプルで、cls.Value = 5 はエラーです。
 アクセス指定子の影響はスコープ内に留まります。そのため、_Data は public です。