Добавить в цитаты Настройки чтения

Страница 336 из 502

<b>partial тип имя_типа {//...</b>

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

Рассмотрим пример разделения простого класса, содержащего координаты ХУ, на три отдельных файла. Ниже приведено содержимое первого файла.

<b>partial class XY {</b>

<b>  public XY(int a, int b) {</b>

<b>    X = a;</b>

<b>    Y = b;</b>

<b>  }</b>

<b>}</b>

Далее следует содержимое второго файла.

<b>partial class XY {</b>

<b>  public int X { get; set; }</b>

<b>}</b>

И наконец, содержимое третьего файла.

<b>partial class XY {</b>

<b>  public int Y { get; set; }</b>

<b>}</b>

В приведенном ниже файле исходного текста программы демонстрируется применение класса XY.

<b>// Продемонстрировать определения частичного класса.</b>

<b>using System;</b>

<b>class Test {</b>

<b>  static void Main() {</b>

<b>    XY xy = new XY(1, 2);</b>

<b>    Console.WriteLine(xy.X + &quot;,&quot; + xy.Y);</b>

<b>  }</b>

<b>}</b>

Для того чтобы воспользоваться классом XY, необходимо включить в компиляцию все его файлы. Так, если файлы класса XY называются xy1.cs, ху2.cs и хуЗ.cs, а класс Test содержится в файле test.cs, то для его компиляции достаточно ввести в командной строке следующее.

<b>csc test.cs xyl.cs xy2.cs xy3.cs</b>

И последнее замечание: в C# допускаются частичные обобщенные классы. Но параметры типа в объявлении каждого такого класса должны совпадать с теми, что указываются в остальных его частях.

Частичные методы

Как пояснялось в предыдущем разделе, с помощью модификатора partial можно создать класс частичного типа. Начиная с версии 3.0, в C# появилась возможность использовать этот модификатор и для создания частичного метода в элементе данных частичного типа. Частичный метод объявляется в одной его части, а реализуется в другой. Следовательно, с помощью модификатора partial можно отделить объявление метода от его реализации в частичном классе или структуре.

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

Ниже приведена расширенная версия предыдущей программы, в которой создается частичный метод Show(). Этот метод вызывается другим методом, ShowXY(). Ради удобства все части класса XY представлены в одном файле, но они могут быть распределены по отдельным файлам, как было показано в предыдущем разделе.

<b>// Продемонстрировать применение частичного метода.</b>

<b>using System;</b>

<b>partial class XY {</b>

<b>  public XY(int a, int b) {</b>

<b>    X = a;</b>

<b>    Y = b;</b>

<b>  }</b>

<b>  // Объявить частичный метод,</b>

<b>  partial void Show();</b>

<b>}</b>

<b>partial class XY {</b>

<b>  public int X { get; set; }</b>

<b>    // Реализовать частичный метод,</b>

<b>    partial void Show() {</b>

<b>      Console.WriteLine(&quot;{0}, {1}&quot;, X, Y);</b>

<b>  }</b>

<b>}</b>

<b>partial class XY {</b>

<b>  public int Y { get; set; }</b>

<b>  // Вызвать частичный метод,</b>

<b>  public void ShowXY() {</b>

<b>    Show();</b>

<b>  }</b>

<b>}</b>

<b>class Test {</b>

<b>  static void Main() {</b>

<b>    XY xy = new XY(1, 2);</b>

<b>    xy.ShowXY();</b>

<b>  }</b>

<b>}</b>

Обратите внимание на то, что метод Show() объявляется в одной части класса XY, а реализуется в другой его части. В реализации этого метода выводятся значения координат X и Y. Это означает, что когда метод Show() вызывается из метода ShowXY(), то данный вызов действительно имеет конкретные последствия: вывод значений координат X и Y. Но если закомментировать реализацию метода Show(), то его вызов из метода ShowXY() ни к чему не приведет.