our notes for our youngers

September 10, 2009

basic of C# (part 21)

Filed under: Basic of C# — Tags: , , , , — sevenlamp @ 9:31 AM

ဟိုေန႔က ကြၽန္ေတာ္တို႔ Instant constructor အေၾကာင္းသိခဲ႔ျပီးျပီ။ Constructor လို႔ဆိုလိုက္တာနဲ႔ programmer ေတာ္ေတာ္မ်ားမ်ား ေျပးျမင္မီၾကတာလည္း ဒီ Instant Constructor ပါပဲ။ အသံုးအမ်ားဆံုးနဲ႔ မသံုးမျဖစ္ Constructor လည္းျဖစ္ပါတယ္။ Instant Constructor အျပင္ တျခား လူသိနည္းတဲ႔ constructor ၂ ခုရွိပါေသးတယ္။ အဲ့ဒါေတြကေတာ့ Private Constructor နဲ႔ Static Constructor တို႔ပါပဲ။ Instant Constructor ကို public constructor လိုလဲ ေခၚပါေသးတယ္။ constructor ရဲ႕ ေရွ႕မွာ public keyword ကိုေရးေပးရပါတယ္။ ဘာလို႔လဲ ဆိုေတာ့ class ကို object ေဆာက္ဖို႔အတြက္ တျခား class ေတြ ထဲမွာ ေခၚသံုးလို႔ ရေအာင္ပါ။ private လို႔ေရးလိုက္လို႔ရွိရင္ေတာ့ အဲ့ဒီ private constructor ပါတဲ႔ class ကို object ေဆာက္လုိ႔ မရေတာ့ပါဘူး။ ဒါေၾကာင့္ object မေဆာက္ေစခ်င္တဲ႔ class ေတြမွာ private constructor ကိုေရးေပးေလ့ရွိပါတယ္။ ဥပမာ…

using System;
class Constant
{
    private Constant()
    {}
    public static string DeveloperName = "Sevenlamp";
}
class Program
{
    static void Main()
    {
    //Constant c = new Constant(); // error
        Console.WriteLine(Constant.DeveloperName);
        Console.Read();
    }
}

ဒီ program ေလးမွာ private constructor ေၾကျငာထားလို႔ Constant class ကို object ေဆာက္လို႔ မရပါဘူး။ ဒါဆိုရင္ အဲ့ဒီ class ထဲမွာ ရွိတဲ႔ member data ေတြကို ဘယ္လို ျပန္ေခၚသံုးမလဲ။ ဟုတ္ကဲ႔ ကြၽန္ေတာ္တို႔ private constructor ရွိတဲ႔ class ေတြထဲက member ေတြကို ျပန္သံုးလို႔ ရေအာင္ အဲ့ဒီ member ေတြကို static keyword နဲ႔ တြဲ႔ျပီး ေၾကျငာေပးရပါမယ္။ ဟုတ္ျပီ အဲ့ဒီ variable ေတြကို static variable တနည္းအားျဖင့္ class variable လို႔ေခၚပါတယ္။ အဲ့ဒီ class variable ေတြကို ေခၚဖို႔အတြက္ သူရွိေနတဲ႔ class ကုိ object ေဆာက္စရာ မလိုပါဘူး။ program မွာ ေခၚထားသလို class name ကေနတဆင့္ ေခၚသံုးလို႔ ရပါတယ္။ ေနာက္ constructor တစ္မ်ိဳးကေတာ့ static constructor ပါ။ class တစ္ခုအတြင္းမွာ ရွိတဲ႔ static member ေတြအလုပ္မလုပ္ခင္ အရင္ဆံုး static constructor က အလုပ္လုပ္ေလ့ရွိပါတယ္။ ခုန program ေလးကိုပဲ static constructor ေလးထည့္ျပီး ျပန္ run ၾကည့္ရေအာင္။

using System;
class Constant
{
    private Constant()
    {}
    static Constant()
    {
        Console.WriteLine("print from static constructor");
        DeveloperName = "Sevenlamp";
    }
    public static string DeveloperName;
}
class Program
{
    static void Main()
    {
        Console.WriteLine(Constant.DeveloperName);
        Console.WriteLine(Constant.DeveloperName);
        Console.Read();
    }
}

Program run လိုက္ရင္ “Sevenlamp” ဆိုတဲ႔ စာသားကို မရိုက္ျပခင္မွာ “print from static constructor” ဆိုတဲ႔ စာသားကိုအရင္ ရိုက္သြားတာ ေတြ႔ရမွာပါ။ ဒါေပမယ့္ တစ္ခုသိထားရမွာက static constructor က static member ေတြကို မေခၚခင္ ပထမဆံုး တစ္ၾကိမ္ပဲ အလုပ္လုပ္ပါတယ္။ ဒါေၾကာင့္ ကြၽန္ေတာ္က developername ကို ၂ ၾကိမ္ရိုက္ျပထားေပမယ့္  “print from static constructor” ကေတာ့ တစ္ၾကိမ္ပဲ ေပၚလာမွာျဖစ္ပါတယ္။ ကဲ ဒီေလာက္ဆို ကြၽန္ေတာ္တို႔ constructor ေတြ အေၾကာင္း နည္းနည္းနားလည္လာျပီ ထင္ပါတယ္။

ေနာက္ပိုဒ့္မွာ static member နဲ႔ instant member အေၾကာင္း ဆက္ေျပာပါ့မယ္။

Leave a Comment »

No comments yet.

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: