2015-08-04 3 views
2

Я не могу получить GetSetMethod свойства из базового класса с помощью частного 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; } 
} 

можно ли получить его или установить значение свойства базового класса

+0

По какой причине вы хотите получить доступ к этому методу? Woulnd't было бы уже нормально просто вызвать 'PropertyInfo.SetValue()'? – HimBromBeere

+0

причина заключается в том, чтобы выяснить, имеет ли он сеттер, и установить его значение, если он это делает, 'PropertyInfo.SetValue()' не будет выдавать команду «Метод набора свойств не найден» – Omu

ответ

5

Когда вы отмечаете сеттер в private, метаданные для метода сеттера действительно отсутствуют в его производных типах , Вы должны найти его в своем DeclaringType (Тип private).

Вы можете попробовать это вместо:

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

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

@JamesThorpe, недостаток, который я вижу, - это необходимость снова вызвать «GetProperty». Когда сеттер не является «частным», нет необходимости снова обращаться к метаданным. – haim770

+0

Да, я понял, что после того, как я отправил сообщение, появился второй вызов 'GetProperty'. Извините за шум :) –

Смежные вопросы