Privát konstruktor

Szükség lehet arra is - ha nem is gyakran -, hogy az osztályból ne tudjunk egyetlen példányt sem létrehozni. Privát konstruktort definiálunk, ami semmit sem csinál (de azt jól), de ha formálisan csinál is valamit, nem sok értelme van, hiszen nem tudja senki kívülről meghívni! Ebben az esetben természetesen minden tagja az osztálynak statikus. A privát konstruktorokat gyakran használjuk, hogy meggátoljuk egy osztály példányosítását kívülről, és csak a saját osztályon belül létrehozhassunk példányokat. A következő példában az osztály egy olyan példányát hozzuk létre, amely csak egyetlen példányban hordoz információt az alkalmazás futása során.

Ebben a példában az AlkalmazasBeall egy privát konstruktorral rendelkezik, amely inicializálja az alkalmazás beállításait, például az alkalmazás nevét és verzióját. Az egyetlen példányt egy statikus mező (pl) és egy statikus metódus (GetPl) segítségével hozzuk létre és adunk vissza. Ezáltal az alkalmazás egyetlen példányban tárolja az alkalmazás beállításait.


Saját destruktor

Ahogy egy osztály definiálásakor szükségünk lehet bizonyos inicalizáló kezdeti lépésekre, úgy az osztály vagy objektum "elmúlásakor" is sok esetben bizonyos lépéseket kell tennünk. Például, ha az osztályunk dinamikusan foglal magának memóriát, akkor azt használat után célszerű felszabadítani. Azt a függvényt, amelyik az osztály megszűnésekor szükséges feladatokat elvégzi, destruktornak, vagy destruktor függvénynek nevezzük. A destruktor meghívása automatikusan történik, és miután az objeuktumot nem használjuk, a keretrendszer automatikusan lefuttatja, és a felszabaduló memóriát visszaadja az operációs rendszernek. Konstruktornak és destruktornak nem lehet visszaadott értéke. A destruktornak mindig publikus osztálymezőnek kell lennie. Ha egy osztályhoz nem definiálunk konstruktort, vagy destruktort, akkor a rendszer automatikusan egy alapértelmezett, paraméter nélküli konstruktort, illetve destruktort definiál hozzá. Ha viszont van saját konstruktorunk, akkor nem 'készül' automatikus. A destruktor automatikus meghívásának a folyamatát szemétgyűjtési algoritmusnak nevezzük (Garbage Collection, GC). Ez az algoritmus nem azonnal, az objektum blokkjának, élettartamának a végén hívja meg a destruktort, hanem akkor, amikor az algoritmus "begyűjti" ezt a szabad memóriaterületet. Ha nem írunk saját destruktor függvényt, akkor is a Garbage Collector minden, az objektum által már nem használt memóriát felszabadít az automatikusan definiált destruktor függvény segítségével. Ez azt jelenti, hgy nincs túlzottan nagy kényszer saját definiálására. A Garbage Collector vakójában az osztály Finaize függvényét hívja meg.

Példa: 

	class osztály
	{
		~osztály()
		{
			....
			//destruktor függványtörzs
		}
	}

Ezt generálja:

	protected override void Finalize()
	{
		try
		{
			...
			//destruktor függvénytörzs
		}

		finally
		{
			base.Finalize();
		}
	}


Tulajdonság, property függvény

A C# nyelv a tulajdonság (property) függvénydefiniálási lehetőségével kínál egyszerű és kényelmes adathozzátérési és módosítási eszközt. Ez egy olyan speciális függvény, amelynek nem jelölhetünk paramétereket, még a zárójeleket sm (), és a függvény törzsében egy get és set blokkot definiálunk. Használata egyszerű értékadásként jelenik meg. Ha a tulajdonság függvényének csak get blokkja van, akkor csak olvasható tulajdonságnak (readonly) nevezzük. Ha a tulajdonság függvényének csak set blokkja van, akkor csak írható tulajdonságnak (writeonly) nevezzük.

Ebben a példában a Szemely osztály két privát adattagot tartalmaz: nev és kor. Az osztályban két property-t definiálunk, amelyek lehetővé teszik a név és az életkor értékeinek beállítását (set) és lekérdezését (get). A Nev property egyszerűen beállítja és lekérdezi a név értékét, a Kor property egy ellenőrzést tartalmaz az életkorra, hogy ne lehessen negatív értéket beállítani.A Main metódusban példányosítunk egy Szemely objektumot, beállítjuk az értékeket a property-k segítségével, majd kiírjuk az értékeket a konzolra.