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