Перегрузка операций

Свойства.

Protected

Private

Public

Классы.

ToCharArray

Лекция № (01.12.10)

При объявлении классов можно указать следующие модификаторы:

new — класс полностью заменяет все методы базового класса.

Abstract — абстрактный класс, объект такого класса нельзя создать.

Sealed — конечный класс, от него нельзя наследовать производные классы.

Поля в классе могут быть объявлены с модификатором доступа:

internal – поле доступно для методов всех классов, определенных в данной сборке. Аналог дружественности в C#

В классе могут быть определены поля, конструкторы, деструкторы, методы, константы, свойства, события и делегаты.

В C# можно инициализировать поля ссылочного типа в объявлении класса.

class s

{

Int32 x = 5;

string s = "abc";

}

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

program(Int32 x):this()

{

this.x=x;

}

Свойства позяовляют для полей класса реализовать собственную стратегию доступа. Кроме того, свойства становятся доступными на стадии разработки программы. Синтаксически свойства реализуются при помощи двух методов — get и set. Метод set будет автоматически вызываться компилятором при присваивании, а метод get при любом доступе.

Public class persona{

private

int age = 0;

string status="";

public

int Age

{

set

{

age=Value;

if(age<7)

status = "ребенок";

else if (age<17)

status = "школьник";

}

get

{

return age;

}

}

};

Замечание — один из методов get и set может отсутвувать. В этом случае можно реализовать стратегии доступа только для чтения, или для записи.

Индексторы — свойства, которые обеспечивают доступ к закрытому полю, являющегося массивом. В этом случае методыы get и set получают аргументы по числу размерностей массива. Важдным ограничением является, то что у класса может быть только один индексатор и у этого иднексатора стандартное имя this. Отсюда, если в классе есть несколько массивов, то индексация возможна только по одному из них. Добавим в класс массивы.

const int Child_Max=20;

Person [] children = new Person[Child_Max];

int count = 0;

public Person this[int i]

{get

{if(if>=0&&if<count)

return children[i];

else

return children[0];

}

set

{

if(if==count&&if<Child_Max)

children[if] = value;

count ++;

}

}

В.NET перегруженная операция представляет собой метод. Когда компилятор встречает в тексте операцию со определенными типами операндов, то он ищет в классе метод с определенным именем. Параметры которого совместимы с типами операндов. Если метод существует — то он вызывается.

+ Add(бинарная)

- Substract

* Myltiply

/ Divide

+ Plus (унарный)

В C# можно перегрузить операции, используя статические методы класса (статические методы вызываются без создания объектов класса).

Пример класса — рациональное число.

Public Rational Plus(Rational a)

{

int u, v;

u = m*a.n + n*a.m;

v = n*a.n

return (new Rational(u,v));

}

public static rational operator +(Rational r1, Rational r2)

{

return (r1.Plus(r2));

}

Методы преобразования.

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

ToXXX() (ххх — это тип, например ToString)

Эти методы не должны принимать параметров. Это справедливо для всех языков.NET.

В C# можно определить перегрузку операторов преобразования, явным и неявных.

1) Неявное преоброзвание.

Public static implict operator Rational(Int32 n)

{

return new Rational(n);

}

Неявное преобразование целочисленного типа в число.

2) Явное преобразование.

Public static explecit Int32(Rational s)

{

return s.ToInt32();

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: