Классы
Елабуга 2013
Лабораторная работа №1
Классы
Теоретические сведения
Класс – это абстрактный тип данных, определяемый программистом. С помощью классов определяются свойства объектов. Объекты это экземпляры класса.
Объявление класса синтаксически имеет следующий вид:
сlass имя_класса
{
// члены класса
}
Члены класса – это данные и функции для работы с этими данными.
Имя класса – это, по сути дела, имя нового типа данных.
Создание экземпляра (объекта) класса осуществляется с помощью оператора new:
Имя_класса имя_объекта = new имя_класса();
Доступ к членам класса управляем. Управление доступом осуществляется с помощью спецификаций доступа:
· public – общедоступный член класса.
· private – член класса доступен только внутри данного класса.
· protected – член класса доступен только внутри данного класса и внутри классов, производных от данного.
· internal – член класса доступен только внутри данной сборки.
По умолчанию в классе устанавливается спецификация доступа private. Спецификация доступа, отличная от private, должна указываться явно перед каждым членом класса.
|
|
Данные класса подразделяются на поля, константы и события.
Поле – это обычная член-переменная, содержащая некоторое значение.
Можно, например, объявить класс, членами которого являются только поля:
class CA
{
public int x;
protected float z;
double m;
public char sim;
private decimal sum;
}
Обратите внимание, на то, что поле m здесь объявлено по умолчанию приватным.
Константы – это поле, объявленное с модификатором const, или, другими словами это поле, значение которого изменить нельзя, например:
public const int x = 25;
События – члены класса, предназначенные для информирования клиентов класса, что, что-то произошло.
Все не статические член функции класса имеют неограниченный доступ ко всем член данным класса независимо от спецификации доступа.
Методы
В основном, с помощью методов класса осуществляется обработка член данных класса. Другими словами, методы определяют поведение экземпляров данного класса. Методы класса это обычные функции С.
В отличии от функций С, при передаче методу параметров по ссылке, необходимо указывать ключевое слово ref или out. Эти ключевые слова сообщают компилятору, что адреса параметров функции совпадают с адресами переменных, передаваемых в качестве параметров. Любое изменение значения параметров в этом случае приведет к изменению и переменных вызывающего кода. Рекомендуется для входного параметра использовать ключевое слово ref, а для выходного параметра ключевое слово out, так какпараметр функции с ключевым словом ref должен быть обязательно проинициализирован перед вызовом функции. При вызове методов указание ключевых слов ref и out обязательно. Методы могут быть объявлены с ключевым словом static например:
|
|
public static int minabs(ref int x,ref int y)
{
//тело функции
}
В этом случае для вызова метода имя класса, в котором она определена, и через точку имя метода:
Cmin.minabs(ref a,ref b);
Точка в С# означает принадлежность функции данному классу (в нашем случае Cmin).
Для закрепления изложенного материала создайте проект для консоли, введите текст приложения из примера 1.
Скомпилируйте и проанализируйте результаты работы приложения.
Пример 1.
using System;
namespace ConsoleApplication1
{
class Cmin
{
public static int min(int x,int y)
{
int z = (x<y)?x:y;
return z;
}
public static int minabs(ref int x,ref int y)
{
x = (x<0)?-x:x;
y = (y<0)?-y:y;
int z = (x<y)?x:y;
return z;
}
}
class Program
{
static void Main(string[] args)
{
int a=-4;
int b=2;
Console.WriteLine("a={0} b={1}",a,b);
int k =Cmin.min(a,b);
Console.WriteLine("a={0} b={1}",a,b);
Console.WriteLine("k="+k);
k =Cmin.minabs(ref a,ref b);
Console.WriteLine("a={0} b={1}",a,b);
Console.WriteLine("k="+k);
}
}
}