our notes for our youngers

September 7, 2009

basic of C# (part 20)

Filed under: Basic of C# — Tags: , , , , — sevenlamp @ 11:20 AM

ဒီေန႔ ကြၽန္ေတာ္တို႔ Constructor အေၾကာင္း ေျပာရေအာင္။ ကြၽန္ေတာ္တို႔ student ကို object ေဆာက္တုန္းကေရးခဲ႔တဲ႔ code ေလးကို ျပန္ၾကည့္ရေအာင္။

Student s1 = new Student();

ကြၽန္ေတာ္တို႔ class ေတြကို object ေဆာက္ဖို႔ အတြက္ new operator ကိုသံုးျပီး function တစ္ခုကို ေခၚရပါတယ္။ အဲ့ဒီ function name က class name နဲ႔ တူပါတယ္။ အဲ့ဒီ function ကို constructor function လို႔ ေခၚပါတယ္။ ကြၽန္ေတာ္တို႔ ွStudent class ေဆာက္တုန္းက constructor function ေဆာက္ခဲ႔လား။ မေဆာက္ေပးခဲ႔ပါဘူး။ ကြၽန္ေတာ္တို႔မေဆာက္ေပးခဲ႔ပဲ ဘယ္လိုျဖစ္လို႔ ေခၚသံုးလို႔ ရေနပါလိမ္႔။ ဟုတ္ကဲ႔ ကြၽန္ေတာ္တို႔ class တစ္ခု ေဆာက္လိုက္ျပီဆိုတာနဲ႔ compiler က အဲ့ဒီ class ထဲမွာ constructor function ပါလားစစ္ပါတယ္၊ မပါဘူး ဆိုရင္ default constructor function တစ္ခုကို compiler က အလိုအေလွ်ာက္ ေဆာက္ေပးပါတယ္။ ဒီလိုေဆာက္ေပးသြားလိုသာ ကြၽန္ေတာ္တို႔ class ေတြကို object ေဆာက္လို႔ ရတာဗ်။ အိုေက compiler ကေဆာက္ေပးတဲ႔ default constructor က ဘာေတြလုပ္ေပးလဲ ဆိုေတာ့ class ထဲမွာ ရွိတဲ႔ member data ေတြကို default value assign လုပ္ေပးပါတယ္။ default value ဆိုတာဘာလဲ ေျပာျပီးျပီထင္တယ္ေနာ္။ တခါတေလ default constructor က လုပ္ေပးတဲ႔ အလုပ္ေတြကို ကြၽန္ေတာ္က မၾကိဳက္ဘူး ဆိုရင္ ကြၽန္ေတာ္တို႔ လိုခ်င္တဲ႔ ပံုစံရေအာင္ ကိုယ္တိုင္ constructor ေတြ ေဆာက္ေပးဖို႔ လိုပါတယ္။ ဟုတ္ျပီ ဒါဆိုရင္ constructor ေတြဘယ္လို အလုပ္လုပ္လဲ၊ constructor ဘယ္ႏွစ္မ်ိဳးရွိလဲ၊ ကိုယ္ပိုင္ constructor ေတြ ဘယ္လိုေဆာက္လဲ ေလ့လာလိုက္ရေအာင္။

Instant Constructor, Private Constructor နဲ႔ Static Constructor ဆိုျပီး Constructor အမ်ိဳးအစား ၃ မ်ိဳးရွိပါတယ္။ လူသိအမ်ားဆံုးနဲ႔ အသံုးလည္း အမ်ားဆံုး မျဖစ္မေနသံုးေနရတဲ႔ constructor အမ်ိဳးအစားကေတာ့ instant constructor ျဖစ္ပါတယ္။ instant constructor ဆိုတာကေတာ့ ကြၽန္ေတာ္တို႔ class ေတြကို object ေဆာက္ဖို႔အတြက္ new operator နဲ႔ တြဲျပီး ေခၚေနရတဲ႔ constructor ပဲ ျဖစ္ပါတယ္။ instant constructor မွာ ၂ မ်ိဳးထပ္ခြဲနိုင္ပါတယ္။ Default Constructor နဲ႔ Parameterized Constructor ဆိုျပီး ျဖစ္ပါတယ္။ Default constructor ကို compiler က auto ေဆာက္ေပးတယ္ဆိုတာ အေပၚမွာ ကြၽန္ေတာ္ေျပာခဲ႔ျပီးပါျပီ။ ဒါေပမယ့္ တစ္ခု သိထားရမွာက compiler က ကြၽန္ေတာ္တို႔ class ထဲမွာ constructor လံုး၀ မပါဘူး ဆိုမွ default constructor ကို ေဆာက္ေပးတာပါ။ ကြၽန္ေတာ္တို႔ class ထဲမွာ constructor တစ္ခု ပါျပီဆိုတာနဲ႔ default constructor ေဆာက္တဲ႔ အလုပ္ကို compiler က မလုပ္ေပးေတာ့ပါဘူး။ instant constructor တစ္ခုေဆာက္ဖို႔အတြက္ လိုက္နာရမယ့္ စည္းကမ္းေတြကေတာ့ constructor ရဲ႕ ေရွ႕မွာ public keyword ပါရပါမယ္၊ class name နဲ႔ နာမည္တူရပါမယ္၊ return type မထည့္ေပးရပါဘူး။ ကဲ ဟိုေန႔က ေရးခဲ႔တဲ႔ student class ေလးမွာပဲ စမ္းၾကည့္ရေအာင္ဗ်ာ။ ကြၽန္ေတာ္က roll, name နဲ႔ mark တို႔ကို ကိုယ့္ စိတ္ၾကိဳက္ default value ထည့္ေပးဖို႔ ကိုယ္ပိုင္ default constructor ေလး ေဆာက္ပါမယ္။

class Student
{
	public int roll;
	public string name;
	public int mark;
	public Student() // default constructor
	{
		roll = -1;
		name = “?”;
		mark = 0;
	}
	public void Display()
	{
		Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”,
			roll, name, mark);
	}
}
class StudentTest
{
	static void Main()
	{
		Student s1 = new Student();
		s1.Display();
		Console.Read();
	}
}

အိုေက ဒီ program ေလးကို run ၾကည့္ရင္ constructor ထဲမွာ ကြၽန္ေတာ္တို႔ ထည့္ေပးထားတဲ႔ အတိုင္း Roll = 1, Name = “?” နဲ႔ Mark = 0 ဆိုျပီး ေပၚလာမွာပါ။ constructor ကို မထည့္ပဲ run ၾကည့္ရင္ေတာ့ Roll = 0, Name = “” နဲ႔ Mark = 0 ျဖစ္ေနပါလိမ့္မယ္။ ဒါက default constructor အလုပ္လုပ္ပံုပါ။ အခု parameterized constructor အေၾကာင္းဆက္ၾကည့္ရေအာင္။ ကြၽန္ေတာ္က student class ကို object ေဆာက္တဲ႔ constructor function ေလးထဲကို student ရဲ႕ name ေလးကို parameter အေနနဲ႔ ထည့္ေပးခ်င္တယ္ ဆိုရင္ အခုကြၽန္ေတာ္တို႔ ေဆာက္ထားတဲ႔ default constructor ကို သံုးလို႔ မရေတာ့ပါဘူး။ ဒါဆို string တစ္ခု လက္ခံမယ့္ constructor တခုထပ္ေရးေပးဖို႔ လိုအပ္လာပါျပီ။ အခုလို ေရးလိုက္ပါမယ္။

class Student
{
	public int roll;
	public string name;
	public int mark;
	public Student(string name) // parameterized constructor
	{
		roll = -1;
		this.name = name;  // assign local to member
		mark = 0;
	}
	public void Display()
	{
		Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”,
			roll, name, mark);
	}
}
class StudentTest
{
	static void Main()
	{
		Student s1 = new Student(“Mg Mg”);
		s1.Display();
		Console.Read();
	}
}

ဒီ program ေလးကို run ရင္ Roll = -1, Name = “Mg Mg” နဲ႔ Mark = 0 ဆိုျပီး ျပပါလိမ့္မယ္။ ဒီ program မွာ ကြၽန္ေတာ္က default constructor အစား parameterized constructor ကိုထည့္လိုက္ပါတယ္။ ဒါဆိုရင္ compiler က default constructor ေဆာက္ေပးမွာလား ? မေဆာက္ေပးဘူးေနာ္။ ဒါေၾကာင့္ ကြၽန္ေတာ္က Main function ထဲမွာ ဒီလို သြားေရးရင္ error တက္ပါလိမ့္မယ္။
Student s2 = new Student(); // error code
ဘာလို႔လဲ ဆိုေတာ့ default constructor မပါလို႔ပါ။ အခုေရးလိုက္တဲ႔ constructor ထဲမွာ this.name = name; ဆိုျပီး ေရးလိုက္တာကို ေတြ႔မွာပါ၊ အဲ႕ဒါေလး ျပန္ရွင္းပါဦးမယ္။ Student class ထဲမွာ ကြၽန္ေတာ္က name ဆိုတဲ႔ variable ေလးကို ေၾကျငာထားျပီးသားပါ။ အဲ့ဒါကို member variable လို႔ ေခၚေၾကာင္းလည္း သိျပီးသားပါ။ ဒီလိုပါပဲ ကြၽန္ေတာ္ အခု ေဆာက္လိုက္တဲ႔ constructor ထဲမွာ လဲ parameter variable name ကို ထပ္ေၾကျငာလိုက္ပါတယ္။ အဲ့ဒါကိုေတာ့ local variable လို႔ ေခၚပါတယ္။ ကဲ အခု member နဲ႔ local နာမည္တူေနပါျပီ။ ဒါဆို အေနအထားမ်ိဳးမွာ ကြၽန္ေတာ္က name လို႔ ေခၚလိုက္ရင္ အနီးဆံုး local variable ကိုပဲ compiler က ယူသံုးသြားပါတယ္။ ဒါေၾကာင့္ ကြၽန္ေတာ္က member variable name ကို ေခၚဖို႔အတြက္ this ဆိုတဲ႔ keyword နဲ႔ တြဲျပီး ေခၚေပးရပါတယ္။ instant constructor အေၾကာင္း နားလည္ျပီလားေတာ့ မသိဘူး။ နားမလည္ဘူးဆိုရင္လည္း ေျပာၾကဦးဗ်ာ။ ထပ္ျပီး ျပန္ရွင္းေပးပါ့မယ္။

ေနာက္ေန႔မွ Private နဲ႔ Static constructor ေတြ အေၾကာင္းဆက္ရေအာင္ဗ်ာ။

3 Comments »

  1. hi brother i m very thank u.i m studying c# so ur guide is very useful for me.i wanna know how to connect sql database with C#.and how to insert data and how to read data.please…

    Comment by arkar — September 7, 2009 @ 10:35 PM

    • ADO.NET အပိုင္းကို ကြၽန္ေတာ္ သီးျခားေရးေပးပါ့မယ္။

      Comment by sevenlamp — September 10, 2009 @ 9:54 AM

  2. It is easy to learn bro, keep it on.
    Thanks million.
    Looking forward your part 21.

    Comment by keivn — September 9, 2009 @ 4:28 PM


RSS feed for comments on this post. TrackBack URI

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

Blog at WordPress.com.

%d bloggers like this: