BaseClass
メソッドを持つクラスがありGetPropertyByDataMemberName
ます。このメソッドは、リフレクションを使用してDataMemberAttribute
、指定された名前を持つプロパティを取得します。で静的メソッドとして定義したいBaseClass
ので、各サブクラスで定義する必要はありません。
問題は、このメソッドはリフレクションを使用してプロパティを検索するType
ため、を呼び出すために何らかの方法で電流を取得する必要があることGetProperties
です。静的なメソッドなので、呼び出すことができませんGetType
。そのため、その方法がわかりません。
abstract class BaseClass
{
[DataMember(Name = "p1")]
public int PropertyOne{ get; set; }
public static PropertyInfo GetPropertyByDataMemberName(string dataMemberName)
{
return GetType() // argh! can't call this statically!
.GetProperties()
.Where(z => Attribute.IsDefined(z, typeof(DataMemberAttribute)))
.Single(z => ((DataMemberAttribute)Attribute.GetCustomAttribute(z, typeof(DataMemberAttribute))).Name == dataMemberName);
}
}
非静的にしてみませんか?さて、私がこのようなサブクラスを持っているとしましょう:
class SubClassOne : BaseClass
{
[DataMember(Name = "p2")]
public string PropertyTwo { get; set; }
}
私はこのようなことをしたいです:
static void Main(string[] args)
{
// print property names
Console.WriteLine(BaseClass.GetPropertyByDataMemberName("p1").Name); // should work
Console.WriteLine(BaseClass.GetPropertyByDataMemberName("p2").Name); // should not work
Console.WriteLine(SubClassOne.GetPropertyByDataMemberName("p1").Name); // should work
Console.WriteLine(SubClassOne.GetPropertyByDataMemberName("p2").Name); // should work
}
をGetPropertyByDataMemberName
使用してみましたが、サブクラスではなくtypeof(BaseClass)
、のプロパティのみを取得します。BaseClass
public static PropertyInfo GetPropertyByDataMemberName(string dataMemberName)
{
return typeof(BaseClass)
.GetProperties() // only gets properties of BaseClass
.Where(z => Attribute.IsDefined(z, typeof(DataMemberAttribute)))
.Single(z => ((DataMemberAttribute)Attribute.GetCustomAttribute(z, typeof(DataMemberAttribute))).Name == dataMemberName);
}
だから、これを行う方法は?