კონსტრუქტორები და დესტრუქტორები

ცნობილია, რომ ობიექტი იქმნება შემდეგნაირად MyClass obj= new MyClass();  “MyClass obj” არის პოინტერი ხოლო “new MyClass()” იძახებს კონსტრუქტორს,
რომელიც ქმნის MyClass–ის ობიექტს მეხსიერებაში, აბრუნებს მასზე პოინტერს (მიმთითებელს, იგივე მისამართს) და ჩადებს სტეკში. ხოლო თვითონ ის რაც გამოყოფს მეხსიერებას არის კონსტრუქტორი. “MyClass obj”– მიუთითიბს თუ რა ტიპის ობიექტი იქმნება. ნებისმიერ კლასს უნდა ჰქონდეს კონსტრუქტორი, კონსტრუქტორის გარეშე კლასი ვერ შეიქმნება თუ გავაკეთეთ კლასი კონსტრუქტორის გარეშე, მაშინ თვითონ  .net FrameWork-ი აკეთებს კონსტრუქტორს, რომელსაც ჩვენ ვერ ვხედავთ. მაგრამ თუ ჩვენ დავწერეთ კონსტრუქტორი ამ შემთხვევაში .net FrameWork–ის კონსტრუქტორი გადაიფარება ჩვენს მიერ დაწერილი კონსტრუქტორით. “new MyClass()” –– ჰიპსაც უწოდებენ. როგორც ჩანაწერიდან ჩანს MyClass() არის ფუნქცია.  ჩვენს შექმნილ MyClass კლასს დაუმატოთ კონსტრუქტორი კონსტრუქტორი იწერება როგორც ჩვეულებრივი ფუნქცია იმ განსხვავებით, რომ კონსტრუქტორს არ გააჩნია დასაბრუნებელი ტიპი, ასევე კონსტრუქტორს აქვს იგივე სახელი რაც კლასს.

კონსტრუქტორი შეგვიძლი გამოვიყენოთ როგორც ფუნქცია, ხოლო მასში ჩაწერილი  კოდი შესრულდება ობიექტის ინიციალიზაციამდე, ჩვენს შემთხვევაში კონსოლზე დაწერს “gamodzaxebulia 1 konstruqtori”, გარდა ამისა კონსტრუქტორს შეგვიძლია გაუკეთოთ გადამეტტვირთვა (OverLoad). კონსტრუქტორის დანიშნულებაა კლასი დაუმორჩილოს რაიმე ლოგიკას ობიექტის შექმნის წინ, მოახდინოს ცვლადების ინიციალიზაცია, მიიღოს ფაილის მაისამართი მაგ. (StreamWriter wr=new StreamWriter(@”D:\text1.txt”);) და ასეშემდეგ. თუ ობიექტს გამოვაცხადებთ ისე რომ გადავცემთ ცვლადს ჩვენს შემთხვევაში “string s” მაშინ მეორე კონსტრუქტორი კონსოლზე დაწერს “gamodzaxebulia 2 konstruqtori, meore konstruqrori”. რაც შეეხება დესტრუქტორს იგი ასევე იქმნება ავტომატურად .net FrameWork-ის მიერ კლასის შექმნის მომენტში, ხოლო თუ ჩვენთვითონ შევქმნით დესტრუქტორს მაშინ არსებული დესტრუქტორი გადაიფარება ავტომატურად (როგორც კონსტრუქტორის შემთხვევაში).   დესტრუქტორი ახდენს ობიექტების მიერ დაკავებული მეხსიერების გასუფთავებას, ამით ჩვენ შეგვიძლია მასში ჩავდოთ რაიმე ლოგიკა მაგალითად სანამ მეხსიერებას გაასუფთავებს შეასრულოს რაიმე მოქმედება, ჩვენს მაგალითში პროგრამის დამთავრების წინ კონსოლზე ჩაწერს “Destructor” –ს, ეს თვალისთვის არც ისე შესამჩნევი პროცესია რადგან კონსოლზე ჩაწერისთანავე ხდება პროგრამის დასრულება. დესტრუქტორი შემდეგნაირად იწერება

~MyClass() {
Console.WriteLine(“Destructor”);
}

პირველი იწყება ტილდათი “~”  რომელსაც მოსდევს კლასის დასახელება “MyClass” ხოლო შემდეგ იწერება როგორც ფუნქცია

Advertisements
This entry was posted in C# Programming. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s