はじめに †
- コピーを返すことが可能となる。
- 簡易(浅い)コピーを返す際はSystem.Object.MemberwiseClone?()を返しておけばよい。
- System.Object.MemberwiseClone?()は
- フィールドが値型の場合、そのままオブジェクトのコピーが渡される
- 参照型の場合は参照だけがコピーされる。このため注意が必要。
- コピーはビット単位で行われる。
ICloneable概要 †
interface ICloneable
{
Object Clone(); // このインスタンスのコピーである新しいオブジェクトを返す。
}
コード †
// 普通のクラス
class MyClass
{
int num;
public MyClass(int num)
{
this.num = num;
}
public int Num
{
get { return this.num; }
set { this.num = value; }
}
}
// ICloneable実装クラス
class MyClassCloneable : System.ICloneable
{
int num;
public MyClassCloneable(int num)
{
this.num = num;
}
public int Num
{
get { return this.num; }
set { this.num = value; }
}
public object Clone()
{
return MemberwiseClone();
}
}
利用例 †
コード †
static void Main(string[] args)
{
MyClass a1 = new MyClass(10);
MyClass a2 = a1;
a1.Num = 20;
Console.WriteLine("a1.Num = " + a1.Num);
Console.WriteLine("a2.Num = " + a2.Num);
MyClassCloneable b1 = new MyClassCloneable(10);
MyClassCloneable b2 = (MyClassCloneable)b1.Clone();
b1.Num = 20;
Console.WriteLine("b1.Num = " + b1.Num);
Console.WriteLine("b2.Num = " + b2.Num);
}
出力 †
a1.Num = 20
a2.Num = 20
b1.Num = 20
b2.Num = 10
最新の20件
2015-05-15
2014-12-07
2008-11-17
2007-08-30
2007-04-21
2007-03-13
2007-03-12
2007-02-20
2007-02-14
2007-02-04
2006-11-26
2006-11-23
2006-11-20
2006-11-18
2006-11-13
- counter: 952
- today: 1
- yesterday: 0
- online: 1