0

C++ CLI と C# の 2 つのプロジェクトがあります。C++ CLI アセンブリが C# プロジェクトで参照されている

私はC++ CLIでこのクラスを持っています:

public class ref Player{
    private:
    int id_;
    public:
    Player(int Id) : id_(Id){}
}

このプロジェクトの他の部分では、許可されたプレーヤーの配列を定義します。

PlayerC# では、配列にアクセスしてプログラマーを保護し、C#でクラスの別のインスタンスを作成できるようにしたいと考えています。

コード内の虚数:
C# では:

PlayersArray[0].dostuff();

C# では、私はしたくありません:

Player x = new Player(1);
x.dostuff();
4

5 に答える 5

4

これを行う 1 つの方法は、公開する機能のインターフェイスPlayerを定義し、そのインターフェイスを実装して、公開しないようにすることPlayerです。

これにより、消費者Playerはインターフェースを介してのみ対話するようになり、もちろん、インターフェースを構築することはできません。

于 2013-03-12T07:33:20.293 に答える
2

コンストラクターをプライベートにしますか? C++でもコピーコンストラクターをプライベートにします...

于 2013-03-12T07:31:57.880 に答える
2

C# ではなく C++ でインスタンス化できるようにするには、コンストラクターinternalを C++/CLI アセンブリにします。

internal:
    Player(int Id) : id_(Id) {}

これにより、コンストラクターはそれが定義されているアセンブリにのみ表示されるため、C++/CLI アセンブリ内でオブジェクトを構築できますが、外部では構築できません。

Playerクラス外で何もインスタンス化できないようにするには、コンストラクターを作成しますprivate

private:
    Player(int Id) : id_(Id) {}
于 2013-03-12T07:32:20.980 に答える
0

これを行う最も簡単な方法は、Player のコンストラクターをプライベートとしてマークし、Player クラス内から PlayersArray を作成して設定することです。

于 2013-03-12T07:32:47.900 に答える