Wednesday, March 16, 2011

What is Namespaces???



මගේ පලවෙනි ලිපිය කියවද්දිම ඔයාට මේ ප්‍රශ්නේ එන්න ඇති. "මොකද්ද මේ namespace කියන්නේ කියල". ඔයාගේ ඒ ප්‍රශ්නෙට උත්තරයක් විදියට තමයි මම මේ ලිපිය ලියන්න හිතුවේ.

C# වලදි ඔයාට Console කියන වචනේ අහන්න ලැබුනනේ. අපි මුලින්ම කතා කලෙත් Console Application ගැනනෙ. ඇත්තටම Console කියන්නේ class එකක්. ඒ class එකේ තියෙනව WriteLine කියල function එකක්. මේවට තමයි pre-defined classes හා functions කියන්නේ.C# වල pre-defined functions විශාල ගනණක් තියෙනවා. ghraphics create කරගන්න,disk එකට data write කරගන්න,output එකක් display කරගන්න අපි මේ functions යොදා ගන්නවා.

මේ විදියට තියෙන හැම function එකකම කාර්‍යය වෙන වෙනම මතක තියගන්න එක මිනිහෙක්ට කරන්න පුළුවන් දෙයක් නෙමෙයිනෙ...අන්න ඒ අවුල ලිහන්න Microsoft සමාගම කලේ screen එකට write කරගන්න එකට අදාල functions එක class එකකටත් graphics වලට අදාල functions තවත් class එකකටත් වශයෙන් functions ගොනු කිරීමයි. ඒ ගොනුව වල එකතුවකට තමයි namespace එකක් කියන්නේ. එතකොට හැම function එකකම කාර්‍යය මතක තියාගන්න ඕන නැහැ. අදාල ගොනුව(namespace) ගැන අවබෝධයක් තිබීම පමණක් ප්‍රමාණවත් වෙනවා.





දැන් මම namespace වල තියෙන අනිත් වාසිය පැහැදිලි කරන්නන්. මෙහෙම හිතන්නකෝ...අපි Console කියල class එකක් හදල ඒක ඇතුලේ WriteLine කියල අපේම function එකක් create කරනවා. එතකොට C# compiler එකට Console කියන class එකෙන් refer වෙන්නේ pre-defined class එකද අපි create කරපු class එකද කියල වෙන් කරල අදුන ගන්න බැහැනේ. මේකට කියන්නේ name clashes කියල.


ඒ නිසා Microsoft සමාගම කලේ classes ටික namespace එකකට අන්තර්ගත කරල එමගින් නිවැරදිව refer වෙන class වෙන් කර හදුනා ගැනීමයි. ඔයා visual studio වලින් new project එකක් create කරගත්තාම project එකේ නමින්ම defualt namespace එකක් create වෙනව කියල ඔයට දකින්න ලැබෙන්න ඇති. අන්න ඒ namespace එකේ තමයි අපේ classes අඩංගු වෙන්නේ.

පහත කේතය මගින් මේ namespace concept එක අවබෝධ කරගැනීමට උත්සාහගන්න. 





using System;

class test
{
    static void Main()
    {
        Console.Write("sameera.Console.WriteLine(2, 3) return ");
        Console.WriteLine(sameera.Console.WriteLine(2, 3));
        Console.Write("\n abc(); => ");
        abc();
        Console.Write("test.abc(); => ");
        test.abc();
    }
    public static void abc()
    {
        Console.WriteLine("pre-defined WriteLine function\n");
    }

}
namespace sameera
{

    class Console
    {

        public static int WriteLine(int a,int b)
        {

            return a + b;

        }

    }

}

0 comments:

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Sameera Madushan | Bloggerized by Sameera - Premium Blogger Themes | Hosted Desktop