|
Программирование >> Обработка исключительных ситуаций
Листинг 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);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |