Atributo en los miembros de la interfaz no funciona

En mi aplicación varios modelos necesitanPassword propiedades (por ejemplo,Registration yChangePassword modelos). losPassword propiedad tiene atributos comoDataType yRequired. Por lo tanto, para garantizar la reutilización y consistencia, creé:

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

Y

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

Desafortunadamente, los atributos no funcionan.

Entonces intenté cambiar la interfaz a una clase:

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

Y

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

Ahora está funcionando. ¿Por qué es así?

¿Por qué los atributos funcionan cuando se heredan de la clase pero no funcionan cuando se heredan de la interfaz?