Да си припомним: какво са класовете и обектите?


Инициализация на полета в конструктора – представяне в паметта



страница23/84
Дата03.01.2022
Размер0.54 Mb.
#112941
ТипПрограма
1   ...   19   20   21   22   23   24   25   26   ...   84
Класове
Свързани:
Изпитна тема1, Изпитна тема2
    Навигация на страницата:
  • Collar
Инициализация на полета в конструктора – представяне в паметта

Нека разгледаме подробно, какво прави конструкторът след като бъде извикан и в тялото му инициализираме полетата на класа. Знаем, че при извикване, той ще задели памет за всяко поле и тази памет ще бъде инициализи­рана със стойността по подразбиране.

Ако полетата са от примитивен тип, тогава след подразбиращите се стойности, ще бъдат присвоени новите, които ние подаваме.

В случая, когато полетата са от референтен тип, например нашето поле name, конструкторът ще ги инициализира с null. След това ще създаде обекта от съответния тип, в случая низа "Sharo" и накрая ще се присвои референция към новия обект в съответното поле, при нас – полето name.

Същото ще се получи, ако имаме и други полета, които не са примитивни типове и ги инициализираме в конструктора. Например, нека имаме клас, който описва каишка – Collar:

public class Collar

{

private int size;



 

public Collar()

{

}

}



Нека съответно нашият клас Dog, има поле collar, което е от тип Collar и което инициализираме в конструктора на класа:

public class Dog

{

private string name;



private int age;

private double length;

private Collar collar;

 

public Dog()



{

this.name = "Sharo";

this.age = 3;

this.length = 0.5;

this.collar = new Collar();

}

 



public static void Main()

{

Dog myDog = new Dog();



}

}


Нека проследим стъпките, през които минава конструкторът, след като бъде извикан в Main() метода. Както знаем, той ще задели памет в хийпа за всички полета, и ще ги инициализира със съответните им подразби­ра­щи се стойности:

След това, конструкторът ще трябва да се погрижи за създаването на обекта за полето name (т.е. ще извика конструктора на класа string, който ще свърши работата по създаването на низа):



След това нашия конструктор ще запази референция към новия низ в полето name:



След това идва ред на създаването на обекта от тип Collar. Нашият конструктор (на класа Dog), извиква конструктора на класа Collar, който заделя памет за новия обект:



След това я инициализира с подразбиращата се стойност за съответния тип:



След това референцията към новосъздадения обект, която конструкторът на класа Collar връща като резултат от изпълнението си, се записва в полето collar:



Накрая, референцията към новия обект от тип Dog се присвоява на локалната променлива myDog в метода Main():

 

Помним, че локалните променливи винаги се съхраняват в областта от оперативната памет, наречена стек, а обектите – в частта, наречена хийп.





Сподели с приятели:
1   ...   19   20   21   22   23   24   25   26   ...   84




©obuch.info 2024
отнасят до администрацията

    Начална страница