Свойства.
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();
}