Как использовать частичный метод в С# для расширения существующей реализации

Было бы здорово, если бы это сработало. Я пытаюсь реализовать свою идею не так?

Я хотел бы использовать частичный метод, чтобы иметь возможность расширять существующий код и просто включать/отключать реализацию методов.

В принципе, что ссылка указывает:

Частичные методы позволяют разработчикам классов предлагать крючки метода, аналогично обработчикам событий, которые разработчики могут решить реализовать или не. Если разработчик не предоставляет реализацию, компилятор удаляет подпись во время компиляции.

Моя первая попытка использования этого заключается в следующем:

DefinitionsBase.cs:

namespace ABC {
    public partial class Definitions {
        // No implementation
        static partial void TestImplementaion();
    }
}

DefinitionsExt.cs:

namespace ABC {
    public partial class Definitions {
        static partial void TestImplementaion(){
            // Implementation is here
        }
    }
}

Program.cs:

namespace ABC {
    class Program {
        static void Main(string[] args) {
            Definitions.TestImplementaion();
        }
    }
}

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

Спасибо!

Ответ 1

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

Частичные методы по определению являются частными, так как во время компиляции, в случае, если метод не был реализован, компилятору не нужно проходить весь код, находить все возможные ссылки на этот метод и удалять их. Это выбор дизайна, так как частичные методы необязательно должны быть реализованы, компилятор только смотрит в частичной реализации класса, а не на весь код. Если вы реализуете общедоступный метод, который вызывает частичный метод, и частичный метод не был реализован, компилятор будет по-прежнему смотреть только в файлах и коде частичного класса, даже если у вас есть доступ к этому частичному методу из любого места вашего кода.