无法从基类获取具有私有setter的属性的GetSetMethod

时间:2015-08-04 11:18:06

标签: c# .net

我无法从私有setter的基类中获取属性的GetSetMethod,当属性不是基类时,它可以工作。

static void Main()
{
    Console.WriteLine(typeof(Foo).GetProperty("Prop1").GetSetMethod(true));// this is null
    Console.WriteLine(typeof(Foo).GetProperty("Prop2").GetSetMethod(true));// this has value
}    

public class FooBase
{
    public string Prop1 { get; private set; }
}

public class Foo : FooBase
{
    public string Prop2 { get; private set; }
}

是否可以从基类

获取它或设置属性的值

1 个答案:

答案 0 :(得分:5)

当您将setter标记为private时,setter方法的元数据确实在其派生类型中缺失。您必须在DeclaringTypeprivate的类型}中找到它。

你可以试试这个:

var prop = typeof(Foo).GetProperty("Prop1");
var setter = prop.GetSetMethod(true);

if (setter == null)
    setter = prop.DeclaringType.GetProperty(prop.Name).GetSetMethod(true);