|
分類:[C#]
VS2008 C# Framework3.5
Windows Vista
お世話になります。
クラスを値コピー出来ないかと思い、ICloneable, MemberwiseClone の
キーワードにたどり着きました。
一応、一通りネットで検索したりヘルプを見たりはしたつもりです。
で、結局理解できなかったのは、
1. ICloneable の実装と機能について?
これは本当に初心者丸出しの質問かもしれませんが、
ネットで検索中に良く見たソースですが、
class Hoge : ICloneable
{
int aaa = 0;
object ICloneable.Clone() ←ここ※
{
return this.MemberwiseClone();
}
}
ここ※ の指す部分は、Private や Public や Protected も
記述できません。 もちろんクラスの外から見えません。
(そもそも ”インターフェイス” を理解してないのかもしれません)
結局は Public な(そしてキャストする) Clone()メソッドを用意するわけです。
object ICloneable.Clone() ←ここ※
{
return this.Clone();
}
Public Hoge Clone()
{
return (Hoge)this.MemberwiseClone();
}
この記述で、ICloneable はインターフェイスとして機能してるんでしょうか?
ここ※ は、いつ流れるんでしょうか?
このクラスを呼ぶ側の記述に何か特徴があるんでしょうか?
ただ Hoge hg1 = new Hoge();
Hoge hg2 = new Hoge();
hg1.aaa = 10;
hg2 = hg1.Clone();
では駄目なのでしょうか?
2. ICloneable て必要?
MenberwiseClone は ICloneable の記述なしでも動作する。
しかしヘルプには ”ICloneableインターフェイスを実装するクラスを使用します。”
とあるが、使用例として紹介されているソースコードには ICloneable の記述は一切無い。
それに、DeepCopy を考えると Public な Clone() という名のだたのメソッドを
用意してしまえば、MenberwiseClone が要らなくなり、ICloneable も要らない
となってしまいませんか?
とりとめのない質問になってしまいましたが、
どうかよろしくお願いします。
|