Как один тип может получить доступ к частному установщику свойства другого типа? - PullRequest
1 голос
/ 27 октября 2008

Все, что мне нужно, это способ сделать свойство одного класса «устанавливаемым» только из одного другого класса (своего рода класс менеджера).

Возможно ли это даже в c #?

Мой коллега «достоверно» сообщает мне, что у меня есть недостатки в дизайне, но я чувствую, что должен хотя бы спросить сообщество, прежде чем признать свое поражение!

Ответы [ 13 ]

0 голосов
/ 27 октября 2008

Отражение, хотя я бы согласился, что необходимость сделать это просто, чтобы обойти модификатор доступа, вероятно, указывает на плохой дизайн.

public class Widget
{
   private int count;
   public int Count
   {
      get { return this.count; }
      private set { this.count = value; }
   }
}

public static class WidgetManager
{
    public static void CatastrophicErrorResetWidgetCount( Widget widget )
    {
       Type type = widget.GetType();
       PropertyInfo info = type.GetProperty("Count",BindingFlags.Instance|BindingFlags.NonPublic);
       info.SetValue(widget,0,null);
    }
}
0 голосов
/ 27 октября 2008

Вы можете достичь этого, создав свойство Public в своем «устанавливаемом классе», которое будет наследовать от реального класса, который будет иметь защищенное свойство ... таким образом, только класс наследования может SET, а не класс, который не унаследовать. Но недостатком является то, что вам потребуется класс наследования ...

0 голосов
/ 27 октября 2008

Если это недостаток дизайна, зависит от того, что вы хотите сделать. Вы можете использовать класс StackTrace из System.Diagnostics, чтобы получить тип класса, устанавливающий ваше свойство, а затем сравнить с типом, который вы хотите разрешить устанавливать свойство yor. Но, возможно, есть более эффективные способы выполнения чего-то подобного (например, бокс)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...