2

C# で、コピーすることはできず、参照によってのみ渡すことができるクラスを作成することは何とか可能ですか?

C++ での同等の方法は、コピー コンストラクターとコピー代入演算子を削除することです。

4

3 に答える 3

6

これはデフォルトの動作です。クラスがある場合:

class foo {
    public string bar { get; set; }
}

そしてどこかでこれを行います:

foo f1 = new foo();
foo f2 = f1;

f1との両方f2が同じインスタンスを参照します。たとえば、 を設定するf1.bar = "bar"と、読み取られる値はf2.barになります"bar"

于 2016-01-27T13:39:59.773 に答える
1

内部コンストラクターを作成できます。そのようにして、コンストラクターは、それが定義されているアセンブリからのみ呼び出すことができます。

また、Reflection と StackTrace (たとえば) を使用して、より高度なロジックを作成し、クラスのインスタンスを作成できるユーザーと時期を詳細に制御することもできます。同様のロジックをプロパティに適用して、プロパティ値の変更を誰に許可するかを制御できます。

于 2016-01-27T13:40:18.307 に答える
1

C# にはデストラクタのようなものはなく、ファイナライザのみです。ただし、GC は十分に賢く、特定のオブジェクトに対して参照が存在しなくなったことを認識し、このファイナライザーを呼び出します。したがって、2 つの変数が同じオブジェクトを参照する場合、このオブジェクトは、それらの 2 つの参照が存在する限り存続します。両方 (!!) が範囲外の場合、GC はオブジェクトを収集して削除します。

于 2016-01-27T13:50:11.863 に答える