Tuesday, October 10, 2017

C# For Beginners , Part-18 (Namespace)

আজকে , আমরা -  namespace নিয়ে আলোচনা করবো , মোটামুটি একটু ডিটেইলস। ধরো , তুমি একটা প্রোজেক্ট হাতে নিয়েছো - সেই প্রোজেক্ট এর আন্ডারে মোট দুইটা টিম কাজ করছে । একটা টিম-A  &  আরেকটা  টিম- B। namespace এর সাহায্যে যদি , বিষয়গুলি একটু ইমপ্লিমেন্ট করার ট্রাই করি , তাহলে কি হয় ??? চলো , একটূ দেখে আসি -------

using System;

class Program
{
    public static void Main()
    {
        ProjectA.TeamA .classA.Print();
        ProjectA.TeamB .classA.Print();
    }
 
}

namespace ProjectA
{
    namespace TeamA
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamA project");
              
            }
        }
    }
}

namespace ProjectA
{
    namespace TeamB
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamB project");
                Console.ReadKey();
            }
        }
    }
}

 এখানে , আমরা  using ব্যবহার করে namespace ProjectA ডিক্লেয়ার না করেই , ডট অপারেটর দ্বারা , মেইন মেথোড -এ কাজ করেছি । কিন্তু , আমরা যখন অনেকগুলো namespace নিয়ে কাজ করবো --তখন এইভাবে  ProjectA.TeamA .classA.Print(); namespace এর নাম class এর নাম লিখে , কাজ করতে বেশ অসুবিধা হয় । । তাই , আমরা - using ব্যবহার করে namespace গুলো ডিক্লেয়ার করে কাজ করতে সুবিধা হবে । । চলো , নীচে এরকম একটা কোড দেখে আসি ------------------------


 using System;
using ProjectA.TeamA;

class Program
{
    public static void Main()
    {
        classA.Print();
        ProjectA.TeamB .classA.Print();
    }
 
}
namespace ProjectA
{
    namespace TeamA
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamA project");
              
            }
        }
    }
}
namespace ProjectA
{
    namespace TeamB
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamB project");
                Console.ReadKey();
            }
        }
    }
}

এখানে , আমরা - using ProjectA.TeamA; দিয়ে   ProjectA ও TeamA এর   namespace গুলো ডিক্লেয়ার করেছি বলেই , মেইন মেথোড এর ভেতরে শুধু  ক্লাস ও মেথড এর নাম ডট অপারেটর দিয়ে যুক্ত করলেই   classA.Print();   কাজ হয়ে যাচ্ছে , কিন্তু TeamB  এর জন্য এখনো  বানায়নি । । চলো , এবার আমরা  TeamB এর জন্যও ডিক্লেয়ার করে দেখি , কি হয় ???


using System;
using ProjectA.TeamA;
using ProjectA.TeamB;

class Program
{
    public static void Main()
    {
        classA.Print();
        classA.Print();
    }
 
}
namespace ProjectA
{
    namespace TeamA
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamA project");
               
            }
        }
    }
}




namespace ProjectA
{
    namespace TeamB
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamB project");
                Console.ReadKey();
            }
        }
    }
}

 এটা কিন্তু , রান করাতে পারবে না , কম্পাইল এরর । এটাকে , কম্পাইল করাতেই পারবে না কিন্তু । কারণ কি ?? ভাবো তো । । হুম , আমরা দুই টিম এর ক্ষেত্রেই একই নামের ক্লাস ব্যবহার করেছি , খেয়াল করে দেখো , classA ।।চলো , এইবার - আমরা তাহলে ক্লাস এর নাম পরিবর্তন করে দেখি , কাজ হয় নাকি ??? নিচে , কোড দেখে আসি চলো --------------


using System;
using ProjectA.TeamA;
using ProjectA.TeamB;

class Program
{
    public static void Main()
    {
        classA.Print();
        classB.Print();
    }
 
}
namespace ProjectA
{
    namespace TeamA
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamA project");
               
            }
        }
    }
}
namespace ProjectA
{
    namespace TeamB
    {
        class classB
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamB project");
                Console.ReadKey();
            }
        }
    }
}







হুম , এইবার কিন্তু - ঠিকই কাজ করবে । । কারণ , আমরা - ক্লাস এর নামগুলো চেইঞ্জ করে দিয়েছি । ।। আচ্ছা , আমরা যদি - একই ক্লাস ব্যবহার করেই এই কাজ করতে চাই , তাহলে কিন্তু -- আমাদের
নতুন একটা পদ্ধতি আছে , elias  ব্যবহার করে কাজ করা ।। elias এর আভিধানিক অর্থ হলো , উপনাম । । চলো , দেখি কিভাবে ?? ইউজ করা যায় ????

using System;
using JOY=ProjectA.TeamA;
using JONY=ProjectA.TeamB;

class Program
{
    public static void Main()
    {
        JOY.classA.Print();
        JONY.classA.Print();
    }

}
namespace ProjectA
{
    namespace TeamA
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamA project");

            }
        }
    }
}


namespace ProjectA
{
    namespace TeamB
    {
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamB project");
                Console.ReadKey();
            }
        }
    }
}


ProjectA.TeamA এর জন্য , আমরা eilas হিসেবে JOY ব্যবহার করেছি । । এবং ,  ProjectA.TeamB এর জন্য আমরা eilas হিসেবে JONY ব্যবহার করেছি।তারপর , এই উপনামগুলো ডট অপারেটর এর সাহায্য এ মেইন মেথড-এ ইউজ করেছি । । এখন কিন্তু , একই ক্লাস থাকা সত্তেও ঠিকঠাক ভাবে কাজ করছে ।  আসলে , আমি কি করলাম , ভেবেছো কি ???? আমি কিন্তু , কিছুটা তোমায় বোকা বানালাম ।

 কিভাবে ???? আসলে , আমরা একেবারে প্রথমে যে - ProjectA.TeamA .classA.Print();ও ProjectA.TeamB .classA.Print(); ইউজ করেছিলাম , এখানেও কিন্তু - সেই কাজই করলাম । শুধু , ProjectA.TeamA এর জায়গায় এর eilas হিসেবে JOY  ব্যবহার করে ও ProjectA.TeamB  এর জায়গায়
 এর eilas হিসেবে JONY  ব্যবহার করে  । ঘুরেফিরে , সেই প্রথমটার মতোই কাজ করে ।।   

এখন , আমরা এতক্ষণ কিন্তু -  namespace গুলোকে নেস্টেড ( Nested )  করে ব্যবহার করেছি যেমন ,
ProjectA , namespace এর ভেতরে আরেকটি namespace,  TeamB ব্যবহার করে । । কিন্তু , আমরা চাইলেও ডট অপারেটর এর মাধ্যমে ইউজ করতে পারতাম .। । যেমন ,

using System;
using JOY=ProjectA.TeamA;
using JONY=ProjectA.TeamB;

class Program
{
    public static void Main()
    {
        JOY.classA.Print();
        JONY.classA.Print();
    }

}
namespace ProjectA.TeamA
{
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamA project");

            }
        }
}


namespace ProjectA.TeamB
{
   
        class classA
        {
            public static void Print()
            {
                Console.WriteLine("This is TeamB project");
                Console.ReadKey();
            }
        }
}

যাই হোক , আশা করি -- namespace এর ব্যবহার নিয়ে আমাদের ধারণা আরো অনেক ক্লিয়ার হলো । ।
আজকে এইটুকুই , নিজে নিজে নতুন নতুন করে কোড করে রান করার ট্রাই করো । । আশা করি , আরো ভালো বুঝতে পারবে .।।











No comments:

Post a Comment