c#class internal setter和PropertyGrid

时间:2017-04-08 08:41:27

标签: c# propertygrid internal access-modifiers

我有Winform App,Form上有PropertyGrid。 Person类具有带内部setter的属性(Age)。为什么PropertyGrid上的属性是ReadOnly?逻辑上,PropertyGrid是同一程序集的成员,并且内部组件可供程序集成员访问。

public class Person
{
    public string Name { get; set; }

    internal int Bio { get; set; }

    private int age;
    public int Age
    {
        get { return age; }
        internal set { age = value; }
    }

    public string Location { get; internal set; }
}

感谢。

1 个答案:

答案 0 :(得分:1)

ProperyGrid在其自己的程序集(System.Windows.Forms.dll)中与您的程序集分开。

因此,它无法访问您的程序集内部指定的属性,方法或字段。

仅在Person定义PropertyGrid的同一个程序集中引用PersonAge,不会在System.Windows.Forms.dll中显示PropertyGrid setter }

此外,object obj = this.SelectedObject; Type type = obj.GetType(); PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach(PropertyInfo pInfo in props) { if (pInfo.CanWrite) { // mark as read/write } else { // mark as read-only } } 最有可能使用与此类似的反射:

public

仅检索Age个属性。将返回CanWrite == false首字母,但标有"date(thisday)"