ネタ元:.Netは難しいのかもしれない
もうすでにコメントでほとんど解明されていますが、俺流での解説を試みてみます。
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; } }
}
<<中略>>
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で受けると参照になっちゃう。
インターフェイスは参照型なので、
Idata x, y;
の時点ではインスタンスがありません。
# Val x, y;とすると、この時点でインスタンスが作られます。
で、
x = new Val();
とすると、xが値型を指す参照となり、続く
y = x;
で同じ値型を指す参照がもいっこ増えます。
こんな感じ
x ─┬─→Valのインスタンス
y ─┘
別の言い方をするとxもyもキャストのいらないobject型と考えてみてはどうでしょう?
と、ここまで書いたら記事がもう一個進んどったー。
もそっと考えさせてください。
(;O;)