У меня есть абстрактный базовый класс, где я хотел бы реализовать метод, который будет извлекать свойство атрибута наследующего класса. Что-то вроде этого ...Как получить `Тип` подкласса из базового класса
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)
в абстрактном классе, чтобы иметь доступ к классу наследования? Или это не хорошая практика, и должен ли я реализовать метод в классе наследования вообще?
Не следует ли «Пользователь» наследовать от «MongoEntityBase»? –
Вы правы, спасибо. я починил это – bflemi3