следующие мои коды:получить частный сеттер свойство в пределах наследования
class Foo
{
public string Bar { get; private set; }
}
и
var prop = typeof(Foo).GetProperty("Bar");
if (prop != null)
{
// The property exists
var setter = prop.GetSetMethod(true);
if (setter != null)
{
// There's a setter
Console.WriteLine(setter.IsPublic);
}
}
да, как вы можете себе представить, это работает совершенно правильно. но когда приходит наследство, вещи разные:
class Foo
{
public string Bar { get; private set; }
}
class A : Foo
{
}
конечно я изменил эту строку:
var prop = typeof(Foo).GetProperty("Bar");
к
var prop = typeof(A).GetProperty("Bar");
тогда, связующий получает нулевое значение, и консоль ничего не печатайте!
так ... почему?
btw, есть ли какое-нибудь обходное решение, чтобы это произошло или было совершенно другим способом?
любая помощь будет оценена. Благодарю.
Возможно, вам нужна рекурсия. иерархия может быть любой возможной. – pinopino
no, если вы не используете 'новый' оператор на некотором уровне вашей иерархии, вы всегда получаете' typeof (Foo) 'при вызове' DeclaringType' для свойства 'Bar'. На самом деле, даже если вы используете 'new', это может сработать. –
Я пишу код для подтверждения и да, вы правы.но, когда я использую «новый» оператор, DeclaringType снова не был типом (Foo), его тип (A), ниже был мой код (только иерархия): 'class Foo {public string Bar {get ; частный набор; } } класс A: Foo { Публичная новая строка Bar {get; частный набор; } } класс B: A { } – pinopino