Реализация объектов наследуемого стиля в C # - PullRequest
1 голос
/ 03 сентября 2010

На нашем уровне данных нам нужно создать объекты «стиля», которые могли бы наследовать свои значения от других объектов «стиля».

Пример сценария 1:

class Style
{
   string Name;
   string ParentName;
   // Other properties go here.
}

Итак, когда есть список таких стилей, стиль с родительским именем должен наследовать свои значения стиля от своего родителя .

Сценарий 2:

class ConatiningType
{
    Style BaseStyle;
    Style MouseHoverStyle;
}

В приведенном выше случае MouseHoverStyle должен наследовать свои значения от BaseStyle .

Я уверен, что есть некоторые рекомендуемые шаблоны проектирования для этого сценария.Если это так, пожалуйста, укажите на них.

1 Ответ

1 голос
/ 03 сентября 2010

Возможно, 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 и т. Д.) тогда он никогда не будет пытаться отнести к своему несуществующему родителю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...