Ho una classe base astratta in cui vorrei implementare un metodo che recuperi una proprietà attributo della classe ereditaria. Qualcosa di simile ...Come ottenere `Tipo` di sottoclasse dalla classe base
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;
}
}
e realizzato in questo modo ...
[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; }
}
Ma, naturalmente, con il codice di sopra del GetCustomAttribute()
non è un metodo disponibile perché questa non è una classe concreta.
Cosa deve fare il typeof(this)
nella classe astratta per poter accedere alla classe ereditaria? Oppure non è una buona pratica e dovrei implementare il metodo nella classe ereditaria?
"Utente non ereditato da" MongoEntityBase'? –
Hai ragione, grazie. L'ho riparato – bflemi3