Главная » C# » Частичные классы и методы в Visual C# (Sharp)

0

По умолчанию при создании типа требуется объявить весь, тип в одном файле, как одно целое. Например, следующий класс нужно объявить в контексте единственно файла:

class Example {

const int BaseValue = 10;

public void AddNumbers(int valuel, int value2, ref int response) {

response = BaseValue + valuel + value2;

}

}

Класс Example имеет один метод AddNumbers, который складывает два числа с бовым значением BaseValue. Весь код сохраняется в одном файле.  Но допустим, что мы хотим автоматически сгенерировать класс Example, и чтобы он, в свою очедь, сгенерировал член данных BaseMember, но  не метод AddNumbers. Для этого первоначальный класс нужно разбить на два отдельных класса, где один класс яяется производным от другого:

class BaseGenerated {

protected const int BaseValue = 10;

}

class Example : BaseGenerated {

public void AddNumbers(int valuel, int value2, ref int response) { response = BaseValue + valuel + value2;

}

}

Такой подход является приемлемым, и, самое главное, он работает. Класс BaseGenerated сохраняется в одном файле, а класс Example — в другом. Но данный подход может быть слегка проблематичным, т. к. он подразумевает специфическую архитектуру, где один класс является производным от другого. Альтернативным подходом было бы использовать ключевое слово partial в контексте класса, как показано в следующем коде:

partial class BaseGenerated { const int BaseValue = 10;

}

partial class Example {

public void AddNumbers(int valuel, int value2, ref int response) { response = BaseValue + valuel + value2;

}

)

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

К частичным классам предъявляется требование, чтобы они были полностью опрелены в сборке. Частичный класс имеет смысл только для компилятора С#, но не для инфраструктуры .NET.

Ключевое слово partial можно также применять для создания методов, которые определены в одном месте, а реализованы в другом. Частичные методы можно рас-

сматривать  как определение метода абстрактного класса и реализация его  в этом же методе. Далее приводится пример использования частичного класса:

partial class Example {

partial void AddNumbers(int valuel, int value2, ref int response);

public void MethodO { int response = 0;

AddNumbers(1, 2, ref response); Console.WriteLine("Added numbers (" + response + ")");

}

}

partial class Example {

partial void AddNumbers(int valuel, int value2, ref int response) { response = valuel + value2;

}

}

Частичные методы определяются в контексте частичного  класса.  Частичный  мод объявляется и обозначается префиксным идентификатором partial в одной части класса, а реализуется в другой.

Частичные методы, как и частичные классы, имеют определенные ограничения:

•    они должны возвращать тип void;

•    они должны быть объявлены как private;

•    методы могут быть статическими и использовать методы расширения;

•    в методах нельзя использовать идентификатор параметров out.

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

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии