接口成员的属性不起作用

时间:2012-08-24 09:24:13

标签: c# interface annotations attributes

在我的应用程序中,有几个模型需要Password属性(例如RegistrationChangePassword模型)。 Password属性具有DataTypeRequired等属性。因此,为了确保可重用性的一致性,我创建了:

interface IPasswordContainer{
    [Required(ErrorMessage = "Please specify your password")]
    [DataType(DataType.Password)]
    string Password { get; set; }
} 

class RegistrationModel : IPasswordContainer {
    public string Password { get; set; }
}

不幸的是,属性不起作用。

然后我尝试将界面更改为类:

public class PasswordContainer {
    [Required(ErrorMessage = "Please specify your password")]
    [DataType(DataType.Password)]
    public virtual string Password { get; set; }
}

public class RegistrationModel : PasswordContainer {
    public override string Password { get; set; }
}

现在它正在运作。为什么会这样?

为什么属性在从类继承但从接口继承时不起作用?

1 个答案:

答案 0 :(得分:25)

接口属性的属性不会继承到类,您可以将接口设置为抽象类。

找到answer from Microsoft

  

产品团队不希望实现此功能,主要有两个   原因:

     
      
  • 与DataAnnotations.Validator的一致性
  •   
  • 与ASP.Net MVC中的验证行为保持一致
  •   
  • 棘手的场景:一个类实现了两个具有相同属性的接口,但它们具有冲突的属性。哪一个   属性会优先吗?
  •