Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bestuzhev.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆
  1. Типы значения и ссылочные типы

// Локальные структуры извлекаются из стека

// после завершения метода.

static void LocalValueTypes ()

{

//В действительности int представляет

// собой структуру System.Int32.

int i = 0;

//В действительности Point представляет

// собой тип структуры.

Point p = new Point();

} // Здесь i и р изымаются из стека.

static void ValueTypeAssignment() {

Point p1 = new Point (10, 10); Point p2 = p1;

// Вывод обеих переменных Point,

p1.Display(); p2.Display();

// Изменение значение p1.X и повторный вывод.

// Значение р2.Х не изменяется.

p1.X = 100;

Console.WriteLine("\n=> Changed p1.X\n");

p1.Display(); p2.Display(); }

РЕЗУЛЬТАТ:

X = 10, Y = 10

X = 10, Y = 10

=> Changed p1.X

X = 100, Y = 10

X = 10, Y = 10

class PointRef {

public PointRef(int XPos, int YPos)

{ X = XPos; Y = YPos; }

}

static void ReferenceTypeAssignment () {

PointRef p1 = new PointRef (10, 10); PointRef p2 = p1;

p1.Display(); p2.Display();

p1.X = 100;

Console.WriteLine("\n=> Changed p1.X\n");

p1.Display(); p2.Display(); }

РЕЗУЛЬТАТ:

X = 10, Y = 10

X = 10, Y = 10

=> Changed p1.X

X = 100, Y = 10

X = 100, Y = 10

Важные отличия:

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

В случае передачи ссылочного типа по значению вызывающий код может изменять только значения данных состояния объекта, но не сам объект, на который указывает входная ссылка

  1. Пример:

class Car

{

// 'Состояние' объекта Саr.

public string petName;

public int currSpeed;

}

Определение методов:

…

// Функциональность Car.

public void PrintState()

{

Console.WriteLine («{0} is going {1} MPH.», petName, currSpeed);

}

public void SpeedUp(int delta)

{

currSpeed += delta;

}

Размещение объектов с помощью ключевого слова new:

static void Main(string[] args)

{

Car myCar = new Car();

myCar.petName = "Fred";

}

class Car

{

public string petName;

public int currSpeed;

public Car ()

{

petName = "Chuck";

currSpeed = 10;

}

}

Специальный конструктор:

// Позволяет вызывающему коду установить полное состояние Саr

public Car(string pn, int cs)

{

petName = pn;

currSpeed = cs;

}

…

// Создать объект Car no имени Daisy со скоростью 75 миль в час

Car daisy = new Car ("Daisy", 75);

Понятие ключевого слово static

class Motorcycle

{

public int driverlntensity;

public string name;

public void SetDriverName(string name)

{ name = name; }

}

Для разрешения неоднозначности:

public void SetDriverName (string name)

{ this.name = name; }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]