Есть ли способ неявно ссылаться на объект в отношении has-a без явного использования имени объекта? - PullRequest
0 голосов
/ 21 мая 2019

Я хочу использовать содержащийся объект "неявно", в качестве псевдонима, как если бы это были отношения "this".Поддерживает ли C # что-то подобное или какой шаблон проектирования может быть ближе всего к выраженному намерению?Альтернативный вариант, который я рассматриваю, - определить делегата и реализовать его в классе MyHasA.

Псевдо-пример A

 public class MyClass
    {
    public MyHasA hasA;

    public void MyMethod()
    {
      implicit(hasA)->
     {
       Print("Hello World"); // vs hasA.Print("Hello World") 

     }
    }
  }

Псевдо-пример B

 public class MyClass
    {
    public MyHasA hasA;
    using implicit hasA;
    public void MyMethod()
    {
       Print("Hello World"); // vs hasA.Print("Hello World")          
     }
    }
  }

1 Ответ

0 голосов
/ 21 мая 2019

Эта проблема связана с определением области действия переменных has-a. Типичное решение было бы получить из базового класса и использовать неявно эту ссылку. Эта проблема возникает, когда невозможно получить производные от базового класса из-за недоступной реализации логики или имеет большой объем кода, который им не нужно синтаксически изменять, т. Е. Форма «myObject.DoSomething» против «DoSomething».

Рекомендуемое решение: внутренние классы и частичные классы. Частичные классы позволяют создавать логическое сдерживание. Окончательное решение включало создание частичного класса с делегатом / обработчиком событий во внешнем классе и инициализацию его во внутреннем классе для метода во внешнем классе. Комбинация частичного класса и делегата обеспечивает уровень логического сдерживания, сохраняя при этом большинство преимуществ объектно-ориентированного проектирования.

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/partial-method https://ninjatrader.com/support/forum/forum/ninjatrader-8/strategy-development/102514-strategy-inheritance-in-nt8

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