5

C# 関係者にとっては基本的すぎる質問をして申し訳ありません。私は主に C++ でコーディングを行っています。

では、自分のクラスの代入コンストラクターを書きたい場合、どうすればよいのでしょうか? 私はこれまでのところこれを持っていますが、コンパイルされていないようです:

public class MyClass
{
    public string s1;
    public string s2;
    public int v1;

    public MyClass()
    {
        s1 = "";
        s2 = "";
        v1 = 0;
    }

    public MyClass(MyClass s)
    {
        this = s;    //Error on this line
    }
}


MyClass a = new MyClass();
MyClass b = new MyClass(a);
4

4 に答える 4

8

クラス自体を割り当てることはできません。その形式のコンストラクターは通常、他のクラスのメンバーをコピーします。

public MyClass(MyClass s)
{
    this.s1 = s.s1;
    this.s2 = s.s2;
    this.v1 = s.v1;
}

これにより、他のクラスのアイテムの値による「コピー」が得られます。参照を共有したい場合、それはできませんが、コンストラクターは必要ありません-変数の割り当てはそのためにうまく機能します:

var orig = new MyClass();
var referencedCopy = orig; // Just assign the reference
于 2013-08-08T19:12:50.203 に答える
2

あなたがやろうとしていることは、クローンを使用して達成できます

public class MyClass : ICloneable
{
    public string s1;
    public string s2;
    public int v1;

    public MyClass()
    {
        s1 = "";
        s2 = "";
        v1 = 0;
    }

    public Object Clone()
    {
        return this.MemberwiseClone();
    }
}

消費する:

MyClass a = new MyClass();
MyClass b = (MyClass)a.Clone();
于 2013-08-08T19:13:48.120 に答える
1

thisクラス タイプで割り当てることはできません。おそらく最善の方法は、別のコンストラクターを作成して呼び出すことです。

public MyClass() : this(string.Empty, string.Empty, 0) { }

public MyClass(MyClass s) : this(s.s1, s.s2, s.v1) { }

private MyClass(string s1, string s2, int v1)
{
    this.s1 = s1;
    this.s2 = s2;
    this.v1 = v1;
}
于 2013-08-08T19:13:38.950 に答える