Как я могу написать чистый код для класса, который использует методы модульного расширения? - PullRequest
0 голосов
/ 13 июня 2009

Я пытаюсь сделать что-то довольно ... уникальное, и, может быть, есть гораздо лучший способ сделать это, но ... Я делаю инверсию системы управления (ish), которая использует методы расширения для включения / выключения компоненты класса, поэтому, прежде чем я углублюсь в подробности и запутаю вас, давайте рассмотрим некоторый код!

using TestComponents.CommunicationProtocols.RS232; 
                                             //this brings in the 
                                             //ConnectRS232 extension method

namespace TestMeNamespace
{
    public class Test  //Although this class is defined here, we extend it above
    {
        public void Start()
        {
           this.ConnectRS232(1, 9600); //calls the ConnectRS232 extension method
        }
    }
}

Короче говоря, объявление using расширяет Test в том же файле, который мы определяем. (наследование тоже будет хорошо) Однако с этим есть некоторые проблемы! Прежде всего, безобразный реквизит «это». BLECH. во-вторых, это грязная, взаимозависимая система.

Вот что я пытаюсь достичь:

  • Мне нужен способ легко распространить статические методы на класс (с помощью объявлений все в порядке)
  • Я хочу сделать заявления простыми: ConnectRS232 ();
  • Я не хочу возиться с частичными классами, если мне не нужно.
  • Хорошо бы использовать наследование интерфейса.

Не стесняйтесь задавать мне дополнительные вопросы в комментариях, но, пожалуйста, не оставляйте ответ, если у вас нет ОТВЕТА!

Редактировать: Вместо поднятых вопросов я выполняю некоторую JIT-компиляцию скрипта C # (www.cs-script.com) в моей системе, и эти скрипты будут в основном написаны не программистами, которые были используя действительно «специальный» проприетарный язык для написания сценариев в течение многих лет. Я хочу, чтобы все было просто, как в аду, и целая куча "этих" вызовов выглядит как беспорядок.

1 Ответ

1 голос
/ 13 июня 2009

Я не уверен, что вижу смысл в этом ...

Ваши "расширения" будут только во время компиляции. Методы расширения работают только как статические методы, и, поскольку вы строите это на импорте пространств имен, это скорее конструкция времени компиляции, чем любая форма IoC. (Методы расширения - это просто время компиляции - они ничего не делают во время выполнения.)

Кроме того, учитывая вышеприведенное утверждение, наличие this.Method () не кажется обременительным (рекомендуется использовать его нормально, поэтому такие инструменты, как StyleCop, требуют, чтобы вы делали это при КАЖДОМ вызове метода).

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

...