議論の余地のあるトピックになる可能性がありますが...次のことができないのは本当に嫌いです:
class User
{
public string ImageURL {get;set;}
}
class UserUI : User
{
public Brush ImageBrush {get;set;}
}
User user = GetFromUserFromServer(); //returns User type object, not UserUI
UserUI userUI = user;
userUI.ImageBrush = CreateBrush(userUI.ImageURL);
代わりに、次のようなものを使用します。
class User
{
public virtual string ImageURL {get;set;}
}
class UserUI : User
{
public override string ImageURL
{
get
{
return base.ImageURL ;
}
set
{
if (value != base.ImageURL )
{
base.ImageURL = value;
ImageBrush = CreateBrush(value);
}
}
}
public Brush ImageBrush {get;set;}
public UserUI(User user)
{
ImageURL = user.ImageURL;
}
}
User user = GetFromServer();
UserUI userUI = new UserUI(user);
これははるかに冗長であり、フィールドを User に追加するときはいつでも、それらを UserUI コンストラクターにコピーする必要があります。
ダウンキャストを許可すると、これらすべてがはるかに簡単になり、エラーが発生しにくくなると言っても過言ではありませんか?