Объектно-ориентированное программирование на С#. Андрианова А.А - 51 стр.

UptoLike

51
[модификаторы]
тип_возвр_значения operator#(список_форм_параметров)
Здесь "#" это знак операции С#. Не все операции можно
перегружать. К запрещенным для перегрузки операциям относятся "." ,
"()","[]","||","&&","?:","new", "is", "as", "sizeof", "typeof" и
некоторые другие. Существует несколько ограничений, которые следует
учитывать при перегрузке операций. Во-первых, нельзя менять приоритет
операций. Во-вторых, нельзя изменять число операндов операции. К
примеру, операция "!" имеет только один операнд, поэтому и ее
перегруженная реализация должна быть унарной. В остальном, правила
перегрузки операций совпадают с правилами перегрузки функций.
Перегруженные операции должны отличаться списками параметров.
Например, операция "*" для матриц может быть перегружена как метод
умножения двух матриц или метод умножения матрицы на число.
В С# операторные функции должны быть статическими, т.е. они
являются методами класса, но не методами объекта. Поэтому для бинарных
операторов список параметров должен состоять из двух элементов, для
унарных – из одного, при этом хотя бы один параметр должен иметь тип того
класса, в котором он определен. Также параметры не могут передаваться с
модификаторами ref или out.
Приведем пример перегрузки операции "*" и "~" в классе Matrix:
using System;
namespace Matrix
{
class Matrix
{
// элементы матрицы
double[,] a;
// конструктор матрицы заданных размеров
public Matrix(int rows, int cols)
{
a = new double[rows, cols];
}
// метод заполнения матрицы случайными числами
public void InputMatrix()
{
Random r=new Random();
for (int i = 0; i < a.GetLength(0); i++)
   [модификаторы]
   тип_возвр_значения operator#(список_форм_параметров)

     Здесь "#" – это знак операции С#. Не все операции можно
перегружать. К запрещенным для перегрузки операциям относятся "." ,
"()","[]","||","&&","?:","new", "is", "as", "sizeof", "typeof" и
некоторые другие. Существует несколько ограничений, которые следует
учитывать при перегрузке операций. Во-первых, нельзя менять приоритет
операций. Во-вторых, нельзя изменять число операндов операции. К
примеру, операция "!" имеет только один операнд, поэтому и ее
перегруженная реализация должна быть унарной. В остальном, правила
перегрузки операций совпадают с правилами перегрузки функций.
Перегруженные операции должны отличаться списками параметров.
Например, операция "*" для матриц может быть перегружена как метод
умножения двух матриц или метод умножения матрицы на число.
     В С# операторные функции должны быть статическими, т.е. они
являются методами класса, но не методами объекта. Поэтому для бинарных
операторов список параметров должен состоять из двух элементов, для
унарных – из одного, при этом хотя бы один параметр должен иметь тип того
класса, в котором он определен. Также параметры не могут передаваться с
модификаторами ref или out.
     Приведем пример перегрузки операции "*" и "~" в классе Matrix:

   using System;

   namespace Matrix
   {
      class Matrix
      {
         // элементы матрицы
         double[,] a;

          // конструктор матрицы заданных размеров
          public Matrix(int rows, int cols)
          {
             a = new double[rows, cols];
          }

          // метод заполнения матрицы случайными числами
          public void InputMatrix()
          {
             Random r=new Random();
             for (int i = 0; i < a.GetLength(0); i++)

                                                                       51