Как отобразить свойства базового и производного класса на одном уровне в QuickWatch - PullRequest
0 голосов
/ 06 марта 2020

Я определил следующие базовые и производные классы с соответствующими интерфейсами в соответствии с ними:

public class SomeModule : ModBase, ISomeModule
{
    public Parameter2<int> Param3 { get; set; } = new Parameter2<int>();
}

public interface ISomeModule : IModBase
{        
    Parameter2<int> Param3 { get; set; }
}

public class ModBase : IModBase
{
    public string Name { get; set; }

    public Parameter2<int> Param1 { get; set; } = new Parameter2<int>();
    public Parameter2<bool> Param2 { get; set; } = new Parameter2<bool>();

    public Parameter2<bool> HiddenParam { get; set; } = new Parameter2<bool>();
}

public interface IModBase
{
    string Name { get; set; }
    Parameter2<int> Param1 { get; set; }
    Parameter2<bool> Param2 { get; set; }
    Parameter2<bool> HiddenParam { get; set; }
}

При создании экземпляра объекта SomeModule базовые свойства и производные свойства разобщаются согласно следующей диаграмме (ie Мне нужно смотреть изнутри базового объекта, чтобы увидеть Param3):
enter image description here

Есть ли способ сделать все свойства видимыми из производного объекта ( без необходимости расширения базового объекта, чтобы увидеть Param3) в соответствии с:
enter image description here


Edit

В соответствии с предложением Алекса - Тин Ле, можно добавить строку отладки, чтобы перечислить все свойства в одном и том же месте. Не совсем то, что было после, но неплохо обойтись.
Вот пример использования GetProperties () для перечисления всех свойств производного класса в одном и том же месте:

public class SomeModule : ModBase, ISomeModule
{
    public List<string> DebugString => base.GetType().GetProperties().Select(p => p.Name).ToList();
    public Parameter2<int> Param3 { get; set; } = new Parameter2<int>();
}

Ответы [ 2 ]

1 голос
/ 06 марта 2020

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

   child.Param1 = ....
   child.Param2 = ....
   child.Param3 = ....

Однако, если вы хотите, чтобы он был "видимым" в этом инспекторе часов, я не буду не думаю, что вы можете сделать это. Однако есть хитрость (обходной путь). Я полагаю, у вас есть многоуровневая вложенность, поэтому вы устали расширять каждый уровень. Вы можете добавить ниже код

public class SomeModule : ModBase, ISomeModule
{
    public Parameter2<int> Param3 { get; set; } = new Parameter2<int>();
    public string DebugString => $"Param1: {Param1.ToString()}, Param2: {Param2.ToString()}, Param3: {Param3.ToString()}";
}

Таким образом, каждый раз, когда вы осматриваете 1 объект, вы видите все в 1 месте.

1 голос
/ 06 марта 2020

Нет, к сожалению, нет никакой сборки.
Это то, как строится инспектор, и нет никаких настроек для этого.
Однако, если вы хотите, и это не слишком большая работа для вас, вы возможно, создаст расширение vs для sh.

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