C#Reflection:GetProperties用于'类似方法'的只读属性

时间:2010-08-13 07:16:55

标签: c# reflection

更新:抱歉,我错了,返回了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 个答案:

答案 0 :(得分:2)

我对您声称不会返回StringBar提出异议。这是一个非常普通的财产。

我不认为你的真实代码是非公开的,是吗?

反示例代码 - 在您展示时,Foo 完全

using System;

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

结果:

Bar
StringBar

答案 1 :(得分:0)

这为我打印StringBarBar

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()
            {
            }
        }

    }
}

答案 2 :(得分:0)

当然会返回StringBar属性!我完全相信!它仍然是一个属性,只有get动作(只读)。