Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, OraStarter, Вы писали:
OS>>На микрософте ответили(https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=467764)
OS>>и предложили решение. Как Вам?
ВВ>А где там решение?
Entered by AnDai[MS] on 6/24/2009
using System;
using System.Reflection;
public class Myproperty1
{
private string caption = "A Default caption 1";
public virtual string Caption
{
get
{
return caption;
}
set
{
if (caption != value)
{
caption = value;
}
}
}
}
public class Myproperty2 : Myproperty1
{
private string caption2 = "A Default caption 2";
public override string Caption
{
set
{
if (caption2 != value)
{
caption2 = value;
}
}
}
}
namespace ConsoleApplication7
{
class Program
{
public static int Main()
{
Myproperty2 myproperty2 = new Myproperty2();
Type t = myproperty2.GetType();
do {
PropertyInfo propertyInfo = t.GetProperty("Caption");
if (propertyInfo == null)
break;
MethodInfo methodInfo = propertyInfo.GetGetMethod();
if (methodInfo != null)
{
Console.WriteLine("getter is: {0}", methodInfo);
object value = propertyInfo.GetValue(myproperty2, null);
Console.WriteLine(value);
break;
}
t = t.BaseType;
} while (t != null);
return 0;
}
}
}
ВВ>Вообще ответ в стиле:
ВВ>The Caption property on the class Myproperty2 does not have a Get method.
ВВ>Using reflection is not like using a general purpose object-oriented language, which has all kinds of rules for how to infer what you mean when you obviously don't mean what you say. When using reflection, you have to take the actual structure of the code into account.
ВВ>Мне кажется лапшой. Причем полной
Вообще-то мы "имеем" в виду структуру кода как бы и также имеем в виду, что по умолчанию рефлекшин должен извлекать информацию обо всех мемберах, включая тех которые унаследованы — причем так и происходит, за исключением конкретного случая. Я уже говорил — описанное поведение логично для DeclaredOnly, но без него — нелогично совсем.
ВВ>Товарищи же пытаются объяснить проблему в стиле, что рефлекшин, видите ли, это такая особая штука, с такими особыми правилами, нужно брать в расчет "структуру кода" и бла-бла-бла. Ты их спроси лучше, почему когда речь идет о перегрузке методов нужно брать в расчет одну структуру кода, а при перегрузке свойств — какую-то, видимо, совсем другую?
OK попробую