17

継承クラスの属性プロパティを取得するメソッドを実装したい抽象基本クラスがあります。このようなもの...

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)を変更する必要がありますか? それとも、これは良い習慣ではなく、継承クラスにメソッドを完全に実装する必要がありますか?

4

2 に答える 2