Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to remove attributes from an inherited property?

Is it possible to remove attributes from inherited properties? I thought that by using the new keyword I could do so...

 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; }
 }

... but this doesnt work at all. This surprises me because the new is specifically there to hide inherited members.

like image 260
Sailing Judo Avatar asked Jul 29 '10 21:07

Sailing Judo


1 Answers

Your Employee class now has 2 FirstName properties, one of them is still [Required] ...

Direct answer: No, you cannot remove attributes for as far as I know. That would violate the substitution principle. When an Employee IS-A Person then the properties of Person.FirstName apply.

And: the new keyword here only serves to suppress the 'X is hiding base class member..' warning. It has no effect whatsoever on the semantics of your code.

like image 77
Henk Holterman Avatar answered Sep 28 '22 11:09

Henk Holterman