Программирование >>  Обработка исключительных ситуаций 

1 ... 53 54 55 [ 56 ] 57 58 59 ... 142


Листинг 7.5 (продолжение)

if ( i >= 0 && i < length ) return a[i] : else throw new IndexOutOfRangeException();

/ / исключение

if ( i >= 0 && i < length ) a[i] = value;

else throw new IndexOutOfangeException(); исключение

public void Print( string name )

в1вод на экран

Console.WriteLine( name + : ); for ( int i = 0; i < length; ++i )

Console.Write( \t + a[i] );

Console.WriteLine();

int[] a; int length;

закр1т1й массив

закрытая размерность

class Classl

static void MainO

try {

SafeArray al = new SafeArray( 5. 2, -1. 1, -2 ); al.Print( Массив 1 );

al+ + ;

al.Print( Инкремент массива 1 );

catch ( Exception e )

Console.WriteLine( e.Message );

/ / обработка исключения

Бинарные операции

Можно определять в классе следующие бинарные операции:

+ -*/%& == ! = ><> = < =

ВНИМАНИЕ -

Операций присваивания в этом списке нет.




public SafeArray( params int[] arr )

length = arr.Length; a = new int[length];

for ( int i = 0; i < length: ++i ) a[i] = arr[i];

public static SafeArray operator + ( SafeArray x. SafeArray у ) +

int I en = x.length < y.length ? x.length : y.length; SafeArray temp = new SafeArray den);

for ( int i = 0; i < Ten; ++i ) temp[i] = x[i] + y[i] : return temp;

Синтаксис объявителя бинарной операции:

тип operator бинарная операция (параметра параметр2)

Примеры заголовков бинарных операций:

Cjblic static MyObject operator + ( MyObject ml, MyObject m2 ) Cublic static bool operator == ( MyObject ml, MyObject m2 )

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

Операции == и ! =, > и <, >= и <= определяются только парами и обычно возвращают логическое значение. Чаще всего в классе определяют операции сравнения на равенство и неравенство для того, чтобы обеспечить сравнение объектов, а не их ссылок, как определено по умолчанию для ссылочных типов. Перегрузка операций отношения требует знания интерфейсов, поэтому она рассматривается позже, в главе 9 (см. с. 203).

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

Листинг 7.6. Определение операции сложения для класса SafeArray using System;

ramespace ConsoleApplicationl class SafeArray

{ public SafeArray( int size ) a = new int[size]; length = size;



if ( i >= 0 && i < length ) a[i] = value; else throw new IndexOutOfRangeExceptionC);

public void PrintC string name )

Console.WriteLineC name + : );

for ( int i = 0; i < length; ++i ) Console.WriteC \t + a[i] Console.WriteLineC);

int[] a; закрытый массив

int length; закрытая размерность

class Classl

{ static void MainO

Листинг 7.6 (продолжение)

public static SafeArray operator + ( SafeArray x, int у ) +

SafeArray temp = new SafeArrayCx.length); for ( int i = 0; i < x.length: ++i ) temp[i] = x[i] + y, return temp;

public static SafeArray operator + ( int x, SafeArray у ) +

SafeArray temp = new SafeArray(y.length); for ( int i = 0; i < y.length; ++i ) temp[i] = x + y[i]; return temp;

public static SafeArray operator ++ ( SafeArray x ) ++

SafeArray temp = new SafeArrayU.length); for ( int i = 0: i < x.length; ++i ) temp[i] = + + x.a[ij; return temp;

public int this[int i] II []

if ( i >= 0 && i < length ) return a[i] : else throw new IndexOutOfRangeExceptionC);



1 ... 53 54 55 [ 56 ] 57 58 59 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика