Class daxilində field və ya metod saxlayan proqramçı tərəfindən hazırlanan bir obyektdir. C#-ın class daxilində başqa bir class yaratma kimi bir özəlliyi də var. Bu kimi class-lar nested class adlanır. C#-ın bu xüsusiyyəti proqram tərtibatçılarına class-ları qruplaşdırmaq, class-a kənardan müdaxilənin qarşısını almaq və proqram kodunu daha oxunaqlı hala gətirmək kimi bir imkanı verir. Bu OYP - Obyekt Yönlü Proqramlaşdırmada (OOP - Object Oriented Programming) kapsülləmə (encapsulation) adlanır. Bir növ, class-a yalnız özü ilə eyni kod blokunda olan class-ların bağlanması təmin olunur, başqa class nested class-ı görmür.
Nümunə:
class ParentClass
{
public void Method1()
{
Console.WriteLine("Method 1 was called in parent class");
}
class ChildClass
{
public void Method2()
{
Console.WriteLine("Method 2 was called in child class");
}
}
}
İndi isə əsas ParentClass və ChildClass-ı Main metodunda istifadə edək.
Şəkildən göründüyü kimi 10-cu sətirdə proqramımız xəta ilə qarşılaşdı. Buna səbəb ParentClass-ın daxilindəki public olmayan bütün class-ları kapsülləməsi oldu. Bu bir növ kənardan ChildClass-a müdaxilənin qarşısın aldı. Tutaq ki, bizə belə bir tapşırıq qoyuldu ki, əsas proqramımızda ChildClass-ın Method2 metodunu çağıraq. Bunun üçün doğru üsul ParentClass-da bir metod yaradıb (məsələn: Method3), bu metod daxilində ChildClass-ın Method2 metodunu cağırmaq (yuxarıda dediyimiz kimi class daxilinə aldığı class-ın private olmayan bütün metodlarını görür) və ən sonda Main metodunda Method3 -ü çağırmaq olacaq.
class ParentClass
{
public void Method1()
{
Console.WriteLine("Method 1 was called in parent class");
}
class ChildClass
{
public void Method2()
{
Console.WriteLine("Method 2 was called in child class");
}
}
public void Method3()
{
ChildClass c = new ChildClass();
c.Method2();
}
}
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
ParentClass p =new ParentClass();
p.Method1();
p.Method3();
}
}
}
Əgər nested class-ın bağlantı göstəricisin public olaraq qeyd etsək bu class-a proqramın bütün yerlərindən qoşula bilərik.
Nümunə:
class ParentClass
{
public void Method1()
{
Console.WriteLine("Method 1 was called in parent class");
}
public class ChildClass
{
public void Method2()
{
Console.WriteLine("Method 2 was called in child class");
}
}
}
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
ParentClass p =new ParentClass();
p.Method1();
ParentClass.ChildClass c = new ParentClass.ChildClass();
c.Method2();
}
}
}
Lakin bu üsul istifadə olunması tövsiyə edilməyən üsuldur. Çünki, əgər, nested class daxilində həssas məlumatlar saxlayarsa (məsələn: istifadəçi kodu) proqramın digər class-larından asanlıqla bu məlumatı əldə etmək və ya dəyişdirmək kimi proqram tətbiqinin boşluqları olar.
Top comments (0)