C#,Keywordsမ်ား(၄)

Thursday, July 1, 2010

Static Keyword

Static Keyword ကို classes, fields, methods, properties, operators, events, and constructors ေတြ ေၾကျငာဖို႔သံုးနုိင္ပါတယ္ ။ ဒါေပမဲ႔ indexers, destructors ေတြနဲ႔ေတာ႔ တြဲသံုးလို႔မရပါဘူး ။
တကယ္လို႔ class တစ္ခုကို static နဲ႔ ေၾကျငာမယ္ဆိုရင္ အဲဒီ class ထဲမွာပါတဲ႔ member အားလံုး ဟာ
Static အျဖစ္သက္ေရာက္မွာပါ ။ static နဲ႔ေၾကျငာထားတဲ႔ class ေတြဆိုရင္ demostrate လုပ္ၿပီး
Variable ေတြ ရဲ့တန္ဖိုးေတြျပန္ ျပင္လို႔မရဘူးပါ ဘူး ။ operator new ကိုအသံုးၿပီး object အသစ္ေတြ
ထပ္ၿပီးေဆာက္လို႔မရပါဘူး ။ ဒါေၾကာင္႔ static နဲ႔ေၾကျငာထားတဲ႔ class UtilityClass ထဲမွာ member function ျဖစ္တဲ႔ MethodA() ကို ျပန္ေခၚခ်င္ရင္

UtilityClass.MethodA();

လို႔တိုက္ရိုက္ျပန္ေခၚရမွာပါ ။

Static member မ်ားကို instance ျဖစ္ေသာ္ျငားလည္း referenced လုပ္လို႔မရပါဘူး ။

public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}

Int x ကို public နဲ႔ ေၾကျငာထားေပမဲ႔ static သံုးထားတဲ႔အတြက္ ေနာက္မွာ reference လုပ္လို႔မရေတာ႔ပါဘူး ။ ဒါေၾကာင္႔ x=100 လို႔ တန္းၿပီး တန္ဖိုးသြင္းထားပါတယ္။ တကယ္လို႔အဲဒိ x ရဲ့တန္ဖိုးကို သံုးခ်င္တယ္ ။ စခရင္ မွာျပခ်င္တယ္ဆိုရင္ေတာ႔

Console.WriteLine(MyBaseC.MyStruct.x);

လို႔ေရးၿပီးေခၚရပါမယ္ ။
Static function ေတြမွာ static methods or property accessors. ေတြကို reference လုပ္ဖို႔
ဆိုၿပီး key this ကိုသံုးလို႔မရပါဘူး ။


Keyword “abstract”

abstract ကီးကို missing or incomplete implementation ေတြ ေျပာင္းလဲျပဳျပင္ေပးဖို႔သံုးပါတယ္ ။
classes, methods, properties, indexers, and events ေတြနဲ႔ abstract ကိုတြဲၿပီးသံုးနုိင္တယ္ ။
abstract modifier ကို base class ေတြေၾကျငာရမွာသံုးပါတယ္ ။ abstract အျဖစ္ေၾကျငာထားတဲ႔ members ေတြ ဒါမွမဟုတ္ abstract class ထဲမွာပါဝင္ေနတဲ႔ မန္ဘာေတြကို derive class ေတြကေန implement လုပ္ေပးရပါမယ္ ။
*abstract class ကို instantiated လုပ္လို႔မရပါ ။ abstract BaseClass ကို ေအာက္မွာျပထားသလို
Instantiated လုပ္ရင္ အဲရာျပမွာပါ ။
BaseClass bc = new BaseClass(); // Error

* abstract class မွာ methods ေတြ accessor ေတြ ပါဝင္နိုင္သည္ ။
* abstract modifier ေတြကို sealed modifiers ေတြနဲ႔ modify လုပ္လို႔မရပါဘူး ။ ဘာလို႔လဲဆိုေတာ႔ သူတို႔ကဆန္႔က်င္႔ဘက္ေတြျဖစ္ေနလို႔ပါ ။ sealed က inherited လုပ္ခြင္႔မျပဳပါ ။ abstract ကေတာ႔ inherited လုပ္ေပးရပါတယ္ ။
* abstract class မဟုတ္တဲ႔ derive class ေတြမွာ base class ျဖစ္တ႔ဲ abstract class ထဲမွာပါတဲ႔ methods ေတြ accessor ေတြရဲ့ implementation ေတြမျဖစ္မေနပါရပါမယ္ ။
* abstract method ကို abstract class မွာပဲေၾကျငာလို႔ ရနိုင္တယ္ ။
* abstract method က actual implementation မဟုတ္တဲ႔အတြက္ သူ႔မွာ method body မပါပါဘူး ။
ဒါေၾကာင္႔ သူ႔ကိုေရးရင္ “{ }” ထည့္ဖို႔မလိုပါဘူး ။
ဥပမာ ..... public abstract void MyMethod();
သာေရးပါမည္ ။
*abstract method ေၾကာျငာရမွာ static နဲ႔ vitual modifiers ေတြနဲ႔ တြဲၿပီးသံုးခဲ႔တယ္ဆိုရင္ အဲရာျဖစ္ပါတယ္ ။
* static property ကို abstract နဲ႔သြားသံုးရင္လည္း မွားပါတယ္ ။

0 comments:

Post a Comment

ဒီPost ရဲ႕ေရးသားခ်က္နဲ႕ပက္သက္ျပီး ေ၀ဖန္အၾကံျပဳႏုိင္ပါတယ္။