У меня есть абстрактный базовый класс, в котором я хотел бы реализовать метод, который будет извлекать свойство атрибута наследующего класса. Что-то вроде этого...
public abstract class MongoEntityBase : IMongoEntity {
public virtual object GetAttributeValue<T>(string propertyName) where T : Attribute {
var attribute = (T)typeof(this).GetCustomAttribute(typeof(T));
return attribute != null ? attribute.GetType().GetProperty(propertyName).GetValue(attribute, null) : null;
}
}
И реализовано так...
[MongoDatabaseName("robotdog")]
[MongoCollectionName("users")]
public class User : MonogoEntityBase {
public ObjectId Id { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
public string email { get; set; }
[Required]
[DataType(DataType.Password)]
public string password { get; set; }
public IEnumerable<Movie> movies { get; set; }
}
Но, конечно, с приведенным выше кодом GetCustomAttribute()
не является доступным методом, потому что это не конкретный класс.
Что требуется typeof(this)
в абстрактном классе для доступа к наследующему классу? Или это не очень хорошая практика, и должен ли я реализовать метод в наследующем классе вообще?