C # -də bir inşaatçı ilə dağıdıcı arasında fərq nədir?


cavab 1:

C # də heç bir dağıdıcı yoxdur, ancaq digər sonlaşdırıcılar var.

Əslində, bir konstruktor "yeni" açar sözü ilə çağırılır və "silmək" açar sözünü istifadə edən dillərdə dağıdıcılar "silmək" açar sözü ilə çağırılır (və ya obyekt əhatə dairəsindən çıxdıqda).

Digər tərəfdən, bir nəticə verən, obyekt və ya əhatə dairəsi silindikdən bir müddət sonra zibil toplayıcısı tərəfindən çağırılır (texniki cəhətdən, əhatə dairəsindən kənar olmayan göstəricilər yoxdursa).

Finalçılar haqqında iki vacib qeyd:

  • Nə vaxt çağırılacağını dəqiq bilmirsiniz. Bir finalistdə nə etdiyinizə diqqət yetirməlisiniz - eyni sinifdəki digər əşyalar artıq zibil yığılmış ola bilər. Yalnız bir finalçıdakı idarə olunmayan istinadlara toxunmalısınız.

C # -də dağıdıcıya yaxınlaşmaq / istəsəniz, bir metod təqdim edən IDisposable interfeysiniz var. "Tərk et".

C # bir obyektdə bir sıra elan edən və İdarəetmə metodunun adlandığına zəmanət verən "istifadə" adlı xüsusi bir sözə malikdir.

Bu üsul eyni zamanda tətbiqetmə sinfinə aid olan bütün IDisposable obyektləri də xaric etməlidir.

Sinifinizdə idarə olunmayan obyektlər varsa, Boolean parametrini götürən bir atma metodu həddindən artıq yükləmə yaratmalısınız. Bu metod bütün dəyişməmiş istinadları silməlidir. Parametr bool doğrudursa, bütün IDisposable obyektlər də silinməlidir. Daha sonra İdarəetmə metodu heç çağırılmadığı təqdirdə idarə olunmayan mənbələrin sərbəst buraxılmasını təmin etmək üçün Dispose (yalan) adlandıran bir yekunlaşdırıcı yaratmalısınız. Müntəzəm sərəncam atma (həqiqi) və həmçinin GC.SurpressFinalize () adlandırmalıdır, çünki yekunlaşdırma lazım deyildir (bu, obyektin tullantıların daha sürətli toplanmasını təmin edir və finalizatorda səhvlərin qarşısını almağa kömək edir).


cavab 2:

Konstruktor və dağıdıcı C # və ya Java kimi hər hansı bir proqramlaşdırma dilində xüsusi sinif üzvü funksiyalarıdır. Bu üzv funksiyası sinif adı ilə eyni ada malikdir və bir sinif obyekti yaratdığımızda deyilir.

Əsasən, konstruktor bir sinifin məlumat elementlərini işə salmaq üçün istifadə olunur, dağıdıcı isə obyektlərin məhv edilməsi və ya obyektin istifadə etdiyi yaddaşın boşaldılması üçün istifadə olunur.

Konstruktor real vaxt rejimində standart elementlərlə məlumat elementlərini işə salmaq üçün istifadə olunur. Bu səbəbdən standart bir konstruktorumuz var.

Məsələn, Gmail, Yahoo və ya Microsoft kimi bir domenə aid bir e-poçt yaratdığımızda, bəzi standart e-poçtlar qutularımızda görünür. Bu o deməkdir ki, bu e-poçtlar standart dəyərlərdir.

Bunu daha yaxşı başa düşmək üçün Gmail-i bir sinif hesab edin.

Sinif Gmail {simli mesaj; ictimai Gmail (string username) {mesaj = "Gmail-ə xoş gəldiniz" + istifadəçi adı}} Əsas funksiyada Gmail g1 = yeni Gmail ("Shinchan.gupta"); Gmail g2 = yeni Gmail ("aching.gupta");

İndi yeni bir e-poçt idini yaratdığımız zaman, Gmail üçün yeni bir obyekt yaratdığımız deməkdir. Bundan əlavə, mesaj məlumatlarının üzvləri bütün obyektlər üçün standart dəyərlərlə başlanılır. Bu səbəbdən hər Gmail istifadəçisi eyni mesajı öz qutularında alır. Bu deyə biləcəyiniz standart e-poçtdur.

İndi iki obyekt yaratdıq və proqramın işlədiyi anda buraxılmalı olan bir yaddaş ayrılması var. Bunun üçün avtomatik olaraq adlandırılan və yaddaşı boşaltmaq üçün obyektləri məhv edən bir dağıdıcı var.

Sadə dillə desək, bir konstruktordan istifadə edərkən yaddaş ayrılır və bir dağıdıcı istifadə edərkən ayrılmış yaddaş azad olur.