在C#中,您可以使用Reflection来查找没有getter的属性吗?

时间:2017-05-22 17:10:14

标签: c#

在C#中,您可以使用System.Reflection查找没有getter的属性吗?

我尝试过使用不同的绑定标志,但似乎没有任何帮助。

此外,Stack Overflow上的其他问题/答案似乎并不适用,因为它们都使用getter(即{ get; })。如果您找到了您认为适用的并回答了这个问题,请提供链接。

using System;
using System.Reflection;

namespace PropertyInfoExample
{
    public class SomeClass
    {
        public string PublicProperty; // <-- reflection won't show
        public string PublicPropertyWithGetter { get; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            SomeClass someObject = new SomeClass();
            someObject.PublicProperty = "doesn't make a difference";
            BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;
            PropertyInfo[] properties = someObject.GetType().GetProperties(bindingFlags);
            foreach (PropertyInfo property in properties)
                Console.WriteLine(property.Name);
        }
    }
}

输出:

PublicPropertyWithGetter

请注意上面列表中缺少“PublicProperty”

目标.NET Framework:4.5.2

1 个答案:

答案 0 :(得分:4)

这不是.NET所谓的&#34;属性&#34 ;;它是一个成员变量。在.NET中,我们称之为&#34;字段&#34;。

public string PublicProperty;

它只是一个变量。没有涉及代码。

A&#34;属性&#34;有get和/或set

反射方面,您可以使用Type.GetFields()

获取字段
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;

FieldInfo[] fields = someObject.GetType().GetFields(bindingFlags);

正如dasblinkenlight观察到的那样,没有吸气剂的&#34;属性&#34;当然可以存在,但它看起来像这样 - 这是我们大多数人认为你的意思,看到你的头衔:

public string PublicProperty {set {/* some code here */} } 
相关问题