Есть ли способ удалить атрибуты из унаследованного свойства? - PullRequest
10 голосов
/ 30 июля 2010

Можно ли удалить атрибуты из унаследованных свойств?Я думал, что, используя ключевое слово new , я мог бы сделать это ...

 public class Person
 {
     [Required]
     public string FirstName { get; set; }

     [Required]
     public string LastName { get; set; }
 }

 public class Employee : Person
 {
     [Required]
     public string JobTitle { get; set; }

     public new string FirstName { get; set; }
 }

... но это не работает вообще.Это удивляет меня, потому что новый специально предназначен для того, чтобы скрыть унаследованные члены.

1 Ответ

8 голосов
/ 30 июля 2010

Ваш класс Employee теперь имеет 2 свойства FirstName, одно из которых все еще [Обязательно] ...

Прямой ответ: Нет, насколько я знаю, вы не можете удалить атрибуты. Это нарушило бы принцип замещения. Когда Сотрудник является Персоном, тогда применяются свойства Person.FirstName.

И: ключевое слово new здесь только служит для подавления предупреждения «X скрывает члена базового класса ..». Это никак не влияет на семантику вашего кода.

...