Сравнение работы оператора присваивания со структурными и со ссылочными типами. — КиберПедия 

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Сравнение работы оператора присваивания со структурными и со ссылочными типами.

2019-08-03 372
Сравнение работы оператора присваивания со структурными и со ссылочными типами. 0.00 из 5.00 0 оценок
Заказать работу

Работа оператора присваивания на числовых переменных происходит, также как и в других языках программирования (int-структурн.тип)

Пример: int x,y;// описываем переменные х и у.

y=7; //переменной у присваивается значение7.

x=y; // значение переменной у копируется в х,при этом х и у остаютсяразными, независимыми друг от друга переменными.

 

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

 

Пусть а1,а объекты класса А.

 

а=а1;

а и а1 – ссылки, т.е. переменные содержащие адреса, поэтому адрес из ссылки а1 будет переписан в ссылку а. Если до этого, ссылки а и а1 (Рис 2.а), содержали разные адреса, то после выполнения оператора присваивания, они будут содержать один и тот же адрес (Рис 2.б). Объект а получит второе имя, а объект а1, свое имя потеряет, т.е. превратится в «мусор».

 

 

 

Рис.2.

 

13.Передача параметров методу (без использования модификаторов). Примеры.

Используется ссылка this (ссылка на текущий объект).

public int getX() {return x;}

public void setX (int x) {if (x>0) this.x=x; else this.x=1;

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

Пример:

Public int

public void summa(int po1, int po2)

                   {

                   return 8* po 1+2* po 2;

                   }

//вызов Vanyarom. draw (20,20);

Два типа передачи: 1)Передача по значению. Если параметр передается по значению в вызываемый метод, то внутри вызываемого метода создается копия передаваемых параметров и с этой копией происходит работа метода.

int f (int i)

{i=8; return i;}

int i=3, j;

j=f(i);

j=i;

//j=3 переменная i не сменила своего значения

В методе f была создана копия и с ней работал метод f.

2)Передача по ссылке. Вызываемому методу передается адрес объекта, поэтому вызываемый метод работает с переданным ему объектом.

class A {

public int x,y;

}

int g (A a) {a.x=4; a.y=5; return a.x+a.y;}

A a =new A();

a.x=8; a.y=-5;

int j; j=g(a);

j=a.x

Изначально объект а имел поля 8 и -5, но после работы метода они стали равными 4 и 5.

Пишут, что аргументы всегда передаются по значению, но значением ссылки является адрес, созд.копия ссылки, но адрес остан. Перед.объекта.

 

Создание метода, имеющего произвольное число параметров

Для создания такого метода один из его параметров (и только один) должен быть с модификатором params, этот параметр должен быть массивом.

int sum (params int [] mas)

{

int s=0;

for (int i=0; i<mas.Length; i++)

       s+=mas[i];

return s;}

 

ints=sum(mas)

int x=3, y=9;

s=sum(x,y,4,5)

 

Передача параметров методу. Модификаторы ref и out. Примеры

Ref.

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

Пример 1. Реализация метода, который умножает число на 5. Число есть входным параметром метода. Метод получает значение числа, умножает его на 5 и возвращает с помощью модификатора ref. То есть, метод увеличивает в 5 раз значение аргумента.

// метод, который увеличивает параметр x в 5 раз

public void Mult5(ref int x)

{

x = x * 5;

}

Вызов метода Mult5() из другого программного кода

int d = 10;qe.Mult5(ref d); // d = 10*5 = 50

После вызова, значение переменной d становится равным 50. Согласно синтаксису C#, перед вызовом переменной d нужно ставить модификатор параметра ref.

 

Out.

Модификатор параметра out используется, если необходимо выполнение двух условий:

· методу не нужно передавать значение;

· метод обязательно должен возвращать значение с помощью параметра.

Модификатор out для параметра с именем param типа type указывается в начале его объявления

Пример 1. Разработать метод, который возвращает число Авогадро. Число Авогадро задается параметром метода.
Текст метода:

// число Авогадро

void GetAvogadro(out double Avg)

{

Avg = 6.022140857e23;

}

Вызов метода из другого программного кода

// вызов метода GetAvogadro() из другого метода

double Avg;

GetAvogadro(out Avg); // указание модификатора out - обязательно

// Avg = 6.022140857E+23

Как видно из вышеприведенного кода, при вызове метода, который содержит out-параметр, обязательно нужно указывать модификатор out

GetAvogadro(out Avg);

 

Одномерные массивы. Массивы ссылочных типов. Примеры.

Массивом называют упорядоченную совокупность элементов одного типа. Каждый элемент массива имеет один или несколько индексов. Индексы задаются целыми числами. Число индексов определяет размерность массива. Если число элементов массива известно в момент его объявления и ему может быть выделена память ещё на этапе трансляции, то такие массивы называются статическими. Если же число элементов массива определяется во время работы программы, то такой массив называют динамическим. Массиву, как правило, выделяется непрерывная область памяти.

Массивы могут быть одномерными и многомерными. Как все в мире C#, массивы это объекты классов. Место для них выделяется в «куче», работа с ними происходит по ссылке.

Массив описывается следующим образом: <тип> [] <имя_массива>;

 

Имя массива это ссылка, если массив не инициализируется при объявлении, то создается он оператором new. Рассмотрим пример.

int [] mas1; mas1=new int[10];

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

int n=Convert.ToInt32(textBox1.Text);

 

int [] mas2=new int[n];

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

Статический массив может быть создан с помощь инициализирующего значения, например: int [] mas3={1,4.-5,9,-4}.

При создании массива с помощью оператора new, элементы обнуляются. Нумерация элементов массива начинается с 0, т.е. первый элемент массива будет иметь номер 0.

Работа с массивом происходим стандартным образом:

mas1[0]=6;//первому элементу массива mas1 присвоено значение 6 mas2[0]=3;//элементу под номером 0, массива mas2 присвоено значение 3 mas1[1]=mas1[0]+mas3[0]; //элементу под номером 1, массива mas1 //присвоена сумма значений первых элементов массивов mas1, mas3.

Поскольку в C# массив – объект некоторого класса, можно использовать, методы и свойства этого класса. Так, например, Length – свойство для чтения, возвращающее число элементов массива, если x= mas3.Length; то х получит значение 5.

Массивы ссылочных типов.

class A { public int x,y;

           public int f() {return x+y;}

public A() { x=1; y=2; }

   public A (int xx, int yy) { x=xx; y=yy;} }

Если строить массив объектов некоторого класса А, то по команде A[] mas4=new A[7]; создается не сам массив, а массив ссылок. Каждый элемент массива должен быть создан персонально, например, в цикле

 

for(int i=0;i<7;i++) mas4[i]=new A();

 

Возможно и такое решение:

Point [] p ={ new Point (10,20), new Point (40,20), new Point (30,30), new Point (40,60)}; p – это массив точек – объектов класса Point, он инициализирован при объявлении.

A[] mas5={ new A(),new A(3,4),new A(1,2),new A(3,5)}

Элементы массива – это объекты класса. Каждый элемент массива имеет свои поля, определенные в классе А, и для каждого элемента можно вызвать метод f, так же определенный в классе А.

 

Многомерные массивы, прямоугольные и зубчатые. Примеры.

ООП48.

Многомерные массивы бывают прямоугольные и ступенчатые

(зубчатые).

 Определение прямоугольного n-мерного массива выглядит следующим образом:

<тип>[,,,,,] имя_массива;

В квадратных скобках n-1 запятая. При объявлении ступенчатого n-мерного массива запятые не пишутся, но пишется n пар квадратных скобок. Самыми распространенными среди многомерных массивов являются двумерные.

Команда int [,] mas21=new int[3,4]; определяет прямоугольный массив, содержащий 3 строки и 4 столбца. Прямоугольные массивы удобно представлять в виде таблицы (матрицы).

mas 21[0,0]=25; mas 21[1,0]=-3; mas 21[0,1]= mas 21[0,0]+ mas 21[1,0];

Пример: создать трехмерный массив, содержащий 2 строки, 3 столбца и 4 слоя.

int [,,] mas = new int [2,3,4]

Запятых на единицу меньше, чем размерностей массива.

При создании массивов ссылочных типов, как правило, сначала создается массив ссылок, а затем уже сами элементы массива. Например,

A [,] mas22=new A[4,5]; //создается массив ссылок

for(int i=0;i<4;i++)

for(int j=0;j<5;j++)

mas22[i,j]=new A(); // создаются сами элементы массива.

Если класс А имеет общедоступное поле х, то по команде mas22[0,0].x=8; в поле х элемента mas22[0,0] запишется число 8.

В момент описания массива можно создать его полностью, например:

Point[,] p2={{new Point(10,20), new Point(40,20)},

{ new Point (30,30), new Point (40,60)}};

Создан р2 массив точек, содержащий две строки и два столбца.

В ступенчатых массивах сначала определяется число строк, а затем указывается длина каждой строки. Например:

int[][] mas23=new int[3][];// определяем число строк ступенчатого массива;

mas23[0]=new int[2]; // определяем длину первой строки

mas23[1]=new int[6]; // определяем длину второй строки

mas23[2]=new int[3]; // определяем длину третьей строки

mas23[0][0]=8; // элементу с номерами 0,0 присваивается значение 8;

mas23[1][0]=mas23[0][0]+4;   //     элементу  с     номерами  1,0

присваивается значение 12.


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.038 с.