C # Reflection: GetProperties для «похожих на метод» свойств только для чтения - PullRequest
1 голос
/ 13 августа 2010

ОБНОВЛЕНИЕ: Извините, я ошибся, StringBar возвращается.Давайте посмотрим, смогу ли я решить, как удалить этот вопрос.

Представьте себе следующий класс:

public class Foo
{
    public int Bar { get; set; }

    public string StringBar
    {
        get { return Bar.ToString(); }
    }

    public void DoSomething()
    {
    }
}

Если я напишу: typeof(Foo).GetProperties(), информация о свойстве StringBar не будет возвращена, яПредположим, потому что C # думает о нем как о методе, а не как о свойстве.

Однако с точки зрения программистов есть различие: обычно ожидается, что метод вызовет некоторое изменение состояния, а свойство - нет.

Каков наилучший способ получить свойства Bar и StringBar, но не метод DoSomething (без конкретной ссылки на их имена, очевидно)?

Ответы [ 3 ]

2 голосов
/ 13 августа 2010

Я оспариваю ваше заявление о том, что StringBar не будет возвращен.Это совершенно обычное свойство.

Я не думаю, что в вашем реальном коде оно не является публичным, не так ли?

Код контр-примера - с Foo точно как вы его представили:

using System;

class Test
{
    static void Main()
    {
        foreach (var prop in typeof(Foo).GetProperties())
        {
            Console.WriteLine(prop.Name);
        }
    }
}

Результаты:

Bar
StringBar
0 голосов
/ 13 августа 2010

Конечно свойство StringBar будет возвращено! Я абсолютно уверен! Это все еще свойство, только с действием get (только для чтения).

0 голосов
/ 13 августа 2010

Это печатает StringBar и Bar для меня.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            foreach (var item in typeof(Foo).GetProperties())
                Console.WriteLine(item.Name);

            Console.ReadKey();
        }

        public class Foo
        {
            public int Bar { get; set; }

            public string StringBar
            {
                get { return Bar.ToString(); }
            }

            public void DoSomething()
            {
            }
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...