続インタフェース

プロパティを含んだインタフェース。あと、プロパティのアクセス修飾子も。

#include "stdafx.h"

using namespace System;

interface class IFoo {
    // getのみ
    property int Bar { 
        int get();
    }

    // setのみ
    property int Baz {
        void set(int value);
    }

    // getとset
    property int Qux {
        int get();
        void set(int value);
    }
};

ref class Foo : IFoo {
public:
    virtual property int Bar {
        int get() {
            return 0;
        }
    }

    virtual property int Baz {
protected:
        // プロパティの明示的実装
        void set(int value) = IFoo::Baz::set {}
    }

    virtual property int Qux {
public:
        int get() {
            return Quux;
        }
        void set (int value) {Quux = value; }
    }

    // ちなみに、C#2.0同様プロパティはget/set毎にアクセス修飾子を変えられる
    property int Quux {
public:
        int get() {
            return 0;
        }
private:
        void set(int value) {}
    }
};

int main(array<System::String ^> ^args)
{
    Foo^ foo = gcnew Foo();
    IFoo^ ifoo = foo;
    // 明示的に実装されたプロパティ、IFoo経由でないとアクセスできない
    // foo->Baz = 10;
    ifoo->Baz = 10;

    // getはpublicだが、setはprivateなプロパティ
    int n = foo->Quux;
    // foo->Quux = n;
    return 0;
}