our notes for our youngers

September 17, 2009

basic of C# (part 23)

Filed under: Basic of C# — Tags: , , , — sevenlamp @ 10:07 AM

ဒီေန႔ ကြၽန္ေတာ္တို႔ C# ရဲ႕ property ေတြ အေၾကာင္း ေျပာၾကရေအာင္။ အရင္ဆံုး property ေတြ ဘယ္လိုေၾကာင့္ ျဖစ္ေပၚလာလဲ အရင္စေျပာပါ့မယ္။ ဟုတ္ျပီ ကြၽန္ေတာ္တို႔ class တစ္ခုထဲက instant member data ေတြကို တျခား class ေတြကေန ေခၚသံုးမယ္ဆိုရင္ အဲ့ဒီ instant member ရဲ႕ေရွ႕မွာ public keyword ထည့္ျပီး ေၾကျငာေပးရပါတယ္။ ဒီလိုမ်ိဳးပါ…

using System;
class Test_A
{
    public int var;
}
class Program
{
    static void Main()
    {
        Test_A obj = new Test_A();
        obj.var = 1;
        Console.WriteLine(obj.var);
        Console.Read();
    }
}

ဒီ program ေလးကိုၾကည့္ၾကည့္ပါ။ Test_A class ထဲက var ဆိုတဲ႔ variable ကို program class ထဲကေနေခၚျပီး တန္ဖိုးထည့္တယ္။ ျပီးေတာ့ ျပန္ရိုက္ထုတ္တယ္။ ဒီလိုေခၚလို႔ ရဖို႔အတြက္ Test_A ထဲမွာ public ဆိုျပီး ေၾကျငာေပးရတယ္။ ဒီလို member data ေတြကို public လုပ္ျပီး အျပင္ကေန ေခၚသံုးတာက ေရးရတာ လြယ္ပါတယ္၊ ဒါေပမယ့္ Object-oriented ဆိုျပီး ေအာ္လာၾကတဲ႔ သကာလမွာ data hiding ဆိုတဲ႔ rule ေလးတစ္ခုပါပါလာပါတယ္။ အဲ့ဒီ rule ကေတာ့ member data ေတြကို အျပင္ကေန တိုက္ရိုက္ေခၚျပီး မသံုးရပါဘူး၊ hide လုပ္ထားပါတယ္။ ဒါဆိုရင္ အဲ့ဒီ member ကို အျပင္ကေနဘယ္လိုေခၚမလဲ။ ဟုတ္ကဲ႔ အဲ့ဒီလိုေခၚဖို႔အတြက္ အေစာပိုင္းကာလေတြမွာ ကြၽန္ေတာ္တို႔ member function ေတြကို သံုးရပါတယ္။ ဒီလိုမ်ိဳးပါ….

using System;
class Test_B
{
    private int var;
    public void SetData(int value)
    {
        var = value;
    }
    public int GetData()
    {
        return var;
    }
}
class Program
{
    static void Main()
    {
        Test_B obj = new Test_B();
        obj.SetData(2);
        Console.WriteLine(obj.GetData());
        Console.Read();
    }
}

ဒီ program ေလးကိုၾကည့္လိုက္ပါ။ Type_B class ထဲက member variable ကို အျပင္ကေန ေခၚသံုးလို႔မရေအာင္ private လုပ္လိုက္ပါတယ္။ ျပီးေတာ့မွ အဲ့ဒီ member data ထဲကို တန္ဖိုးထည့္ဖို႔ SetData function နဲ႔ တန္ဖိုးျပန္ထုတ္ဖို႔ GetData function ကိုေရးေပးပါတယ္။ အဲ့ဒီ function ေတြကိုေတာ့ public လုပ္ေပးရပါမယ္။ ဒီလိုေရးလိုက္ျခင္းအားျဖင့္ data hiding rule ကို လိုက္နာျပီးသားျဖစ္သြားပါတယ္။ ခုလိုမ်ိဳး function ကေနတဆင့္ တန္ဖိုးအသြင္းအထုတ္လုပ္တာ မရဘူးလားဆိုေတာ့ ရပါတယ္၊ ဒါေပမယ့္ member variable ကို ေခၚသံုးရတာေလာက္ေတာ့ မလြယ္ကူပါဘူး။ အနည္းဆံုးေတာ့ member data တစ္ခုအတြက္ function ၂ခု မွတ္ေနရပါတယ္။ ဒါေၾကာင့္ C# language မွာေတာ့ data hiding rule ကိုလည္း လိုက္နာျပီး member data ကိုေခၚသလိုလည္း လြယ္လြယ္ကူကူ ေခၚလို႔ရေအာင္ property ဆိုတာကို သံုးလာၾကပါတယ္။ ကဲ property ကို ဘယ္လိုေရးရလဲ….

using System;
class Test_C
{
    private int var;
    public int MyVar
    {
        get
        {
            return var;
        }
        set
        {
            var = value;
        }
    }
}
class Program
{
    static void Main()
    {
        Test_C obj = new Test_C();
        obj.MyVar = 3;
        Console.WriteLine(obj.MyVar);
        Console.Read();
    }
}

Property ေရးတဲ႔ ပံုစံက member function နဲ႔ေတာ့ဆင္ပါတယ္။ အရင္ဆံုး အျပင္ကေနေခၚသံုးလို႔ရေအာင္ public ေၾကျငာေပးရပါတယ္။ ျပီးရင္property ကေန return ျပန္မယ့္ data type ေၾကျငာရမယ္၊ အဲ့ဒီေနာက္မွာေတာ့ property ရဲ႕ name ေပါ့။ function နဲ႔မတူတဲ႔ အခ်က္ကေတာ့ property မွာ parameter လက္ခံတဲ႔ အပိုင္းမပါပါဘူး။ property ထဲကို တန္ဖိုးထည့္ဖို႔အတြက္ set keyword နဲ႔ တန္ဖိုးထုတ္ဖို႔အတြက္ get keyword ကိုသံုးရပါတယ္။ ဆိုလိုတာကေတာ့ property မွာ get နဲ႔ set ဆိုျပီး အပိုင္း၂ ပိုင္းပါ၀င္ပါတယ္။ property ထဲက user က တန္ဖိုးထည့္လိုက္တဲ႔ အခါ အဲ့ဒီ property ထဲက set အပိုင္းထဲမွာ ေရးထားတဲ႔ code ေတြကို အလုပ္လုပ္ပါတယ္။ user ထည့္လိုက္တဲ႔ တန္ဖိုးကေတာ့ value လို႔ေခၚတဲ႔ keyword ထဲကိုေရာက္သြားပါတယ္။ အဲ့ဒီကေနတဆင္ member data ထဲကိုထည့္ေပးပါတယ္။ property ထဲက တန္ဖိုးထုတ္တဲ႔အခါမွာေတာ့ get ထဲမွာ ေရးထားတဲ႔ code ေတြက အလုပ္လုပ္ေပးပါတယ္။ property ကို အျပင္ကေန ေခၚတဲ႔ ပံုစံကေတာ့ ရိုးရိုး member data ကိုေခၚသလိုပဲ ေခၚရပါတယ္။ အိုေက… အခုကြၽန္ေတာ္တို႔ Property ေတြ ေရးတက္ျပီလိုထင္ပါတယ္။ property ကို member data ေတြကို ကိုယ္စားျပဳဖို႔ သံုးတာမ်ားေပမယ့္ member data မရွိပဲနဲ႔လည္း property ကိုပဲေရးလို႔လည္း ရပါတယ္။ ဒီ example program ေလး ေရးျပီး run ၾကည့္ပါဦး။

using System;
class myNumber
{
    private int num;
    public string Num
    {
        get
        {
            return num.ToString();
        }
        set
        {
            try
            {
                num = Convert.ToInt32(value);
            }
            catch
            {
                num = 0;
            }
        }
    }
    public int Square // read only property
    {
        get
        {
            return num * num;
        }
    }
}
class Program
{
    static void Main()
    {
        myNumber obj = new myNumber();
        Console.Write("Enter a number : ");
        obj.Num = Console.ReadLine();
        Console.WriteLine("Square of {0} is {1}", obj.Num, obj.Square);
        Console.Read();
    }
}

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

Create a free website or blog at WordPress.com.

%d bloggers like this: