c# клас вътрешен сетер и PropertyGrid

Имам приложение Winform и във формуляра има PropertyGrid. Класът на човек има свойството (Възраст) с вътрешен сетер. Защо това свойство е само за четене в PropertyGrid? Логически 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; }
}

Благодаря.


person Tim    schedule 08.04.2017    source източник


Отговори (1)


ProperyGrid е в собствено събрание (System.Windows.Forms.dll), отделно от вашето събрание.

Следователно той няма достъп до свойства, методи или полета, които са определени вътрешни във вашият сбор.

Простото препращане както към Person, така и към PropertyGrid от едно и също събрание, където е дефинирано Person, няма да направи Age установителя видим в System.Windows.Forms.dll

Освен това PropertyGrid най-вероятно използва отражение, подобно на това:

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 prpperty ще бъде върнат, но маркиран с CanWrite == false

person Jens Meinecke    schedule 10.04.2017
comment
Значи искате да кажете, че няма никакво решение за това? Благодаря. - person Tim; 10.04.2017