D言語では同じファイル内ならprivateメンバにもアクセス可

仕様ってことなんだけど、ちょっとびっくりした。

同一モジュール内では暗黙的に friend 関係になり、同一ファイル内に書くと同一モジュールとなるので、結果として同一ファイル内なら friend 関係で private 無視なんだそうな。

import std.cstream;

class Shain
{
    private:
        int kihonkyu;

    public:
        void setKihonkyu(int kihonkyu) {
            this.kihonkyu = kihonkyu;
        }
        int getKihonkyu() {
            return kihonkyu;
        }
}

int main() {
    Shain s = new Shain;
    s.setKihonkyu(100);

    dout.writefln("test1:%d", s.getKihonkyu());
    dout.writefln("test2:%d", s.kihonkyu); // errorにならない!!

    return 0;
}