我有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; }
}
感谢。
答案 0 :(得分:1)
ProperyGrid在其自己的程序集(System.Windows.Forms.dll
)中与您的程序集分开。
因此,它无法访问您的程序集内部指定的属性,方法或字段。
仅在Person
定义PropertyGrid
的同一个程序集中引用Person
和Age
,不会在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)"