Как мне добавить атрибут в поле базового класса из дочернего класса?

#c# #.net #inheritance #custom-attributes

#c# #.net #наследование #пользовательские атрибуты

Вопрос:

Базовый класс:

 public class XmlNameValueField : XmlBaseField
{                       
        [XmlAttribute("n")]
        [Required]
        public string Name { get; set; }

        [XmlText]
        public string Value { get; set; }        
 }
 

Дочерний класс:

  public class DateField : XmlNameValueField
 {            
 }
 

В имени поля дочернего класса должен быть дополнительный атрибут

 [DataType (DataType.EmailAddress)]
 

Ответ №1:

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

Комментарии:

1. если у базового класса есть определение, не будет ли дочерний класс переопределять это определение?

2. @sksallaj, атрибуты можно наследовать (используя атрибут AttributeUsageAttribute для самого атрибута)

3. а как насчет реализации метода? Что, если парень хотел сохранить реализацию в базовом классе и не переопределять ее в дочернем классе? Но добавить атрибут только для дочернего класса?

4. @sksallaj извините, я не понимаю, что вы имеете в виду, какой метод вы имеете в виду?

5. Если он виртуальный, вы можете переопределить его и вызвать base.Add(x, y), но добавление атрибута в дочернюю реализацию, вероятно, изменит семантику класса, нарушив принцип подстановки Лискова