次のように2つのクラスがあると仮定します。
class Fruit
{
public string color { get; set; }
}
class Orange : Fruit
{
public double diameter { get; set; }
}
そして、フルーツ変数内にオレンジ色のオブジェクトを作成します
Fruit fruit = new Orange() { color = "Orange", diameter = 10.0 };
// This line prints 10 even though the Fruit class doesn't contain a
// diameter property
Console.WriteLine( ( (Orange) fruit ).diameter );
直径のプロパティを含むオレンジ全体がフルーツ変数に押し込めるのはなぜですか? Fruit 変数が Fruit クラス定義によって制限されないのはなぜですか?
この例のように、代わりに新しい Orange を Orange 変数内に配置すると、どのような違いがありますか?
Orange fruit = new Orange() { color = "Orange", diameter = 10.0 };
私が見つけることができる唯一の違いは、変数に対して型テストを行う場合と、オブジェクトを使用する前にキャストする必要がないことです。しかし、それ以上のものがあるはずですよね?