Возможно, Style
само должно иметь ParentStyle
:
class Style
{
private readonly Style parentStyle;
private string name;
public string Name
{
get { return name ?? (parentStyle == null ? null : parentStyle.Name); }
set { name = value; }
}
public Style(Style parentStyle)
{
this.parentStyle = parentStyle;
}
}
Необходимость использования нулевой проверки на parentStyle
несколько раздражает, по общему признанию :( Вы можете создать версию по умолчанию, как это, конечно:
class Style
{
private static readonly Style DefaultStyle = new Style(null) {
Name = "",
...
};
private readonly Style parentStyle;
private string name;
public string Name
{
get { return name ?? parentStyle.Name); }
set { name = value; }
}
public Style(Style parentStyle)
{
this.parentStyle = parentStyle ?? DefaultStyle;
}
}
Обратите внимание, что DefaultStyle
будет все еще иметь нуль parentStyle
(так как DefaultStyle
будет нулевым во время его построения), но если вы дадите ему фактические значения по умолчанию ("", 0 и т. Д.) тогда он никогда не будет пытаться отнести к своему несуществующему родителю.