えとね、
interface Idata { int data { set; get; } }
class Ref : Idata {
private int d;
public int data
{ set { d = value; } get { return d; } }
}
struct Val : Idata {
private int d;
public int data
{ set { d = value; } get { return d; } }
}
↑こんな定義をしますわね。
ほんでもって
Ref x, y;
x = new Ref();
y = x;
x.data = 123;
Console.WriteLine("Ref: x={0}, y={1}", x.data, y.data);
x, y ともに123になります。参照型だもんね。
Val x, y;
x = new Val();
y = x;
x.data = 123;
Console.WriteLine("Val: x={0}, y={1}", x.data, y.data);
x=123, y=0 になります。値型だもんね。
Idata x, y;
x = new Val(); // ※
y = x;
x.data = 123;
Console.WriteLine("Idata of Val: x={0}, y={1}", x.data, y.data);
げげーん、値型なのに x=123, y=123 だって。
値型をinterfaceで受けると参照になっちゃう。
なんでや。
...ってゆー初心者のギモンに正しく分かりやすく説明できる自信がありましぇん。
「蛇口(インターフェイス)をコピーしただけでタンク(実体)は同一なんだね♪」
なんて説明でわかってもらえるかしら。
"ぢゃinterfaceは参照型? 参照型に値型を代入(※)ってどゆこと???"
ってなんないかしら。
# 教え方教えて > かるぼタン