আজকে প্রথমে , আমরা টাইপ মেম্বার এর অ্যাকসেস মোডিফায়ার গুলোর মধ্যে , শুধু তিনটি নিয়ে কথা বলবো ।
Private
Protected
Public
Private -- এই অ্যাকসেস মোডিফায়ার ইউজ করার মানে হলো , আমরা ওই টাইপ মেম্বারকে শুধু ঐ টাইপ (ক্লাস, স্ট্রাক্ট,এনাম , ইত্যাদি ) এর মধ্যেই অ্যাকসেস করতে পারবো , তার বাইরে অন্য কোনো ক্লাসে অথবা , তার ডেরাইভড ক্লাসেও অ্যাকসেস করতে পারবো না ।। শুধুমাত্র ওই টাইপ-এই ইউজ করতে পারবো । ।
Public ---- এই অ্যাকসেস মোডিফায়ার ইউজ করলে , তুমি সেই টাইপ মেম্বার কে শুধু ওই টাইপের ভেতরেই নয় , তার বাইরেও - অন্য ক্লাসেও , এমনকি অন্য অ্যাসেম্বলি'তেও ইউজ করতে পারবে ।
( অ্যাসেম্বলি ) নিয়ে পরে কথা বলবো , আপাতত এইটুকু জেনে রাখলেই চলবে ।। পাবলিক অ্যাকসেস মোডিফায়ার একদমই প্রাইভেট এর ঠিক উলটো ।।
Protected--- এই অ্যাকসেস মোডিফায়ার ব্যবহারের ফলে , আমরা সেই টাইপ মেম্বারকে শুধু ওই টাইপে অথবা , ওই টাইপের কোনো ডেরাইভড টাইপে অ্যাকসেস করা যাবে ।। এর বাইরে ইউজ করতে পারবে না তুমি ।। চলো একটা ছোট্ট উদাহরণ দেখে আসি ----------------
using System;
using System.Collections.Generic;
public class joy
{
protected int id=14 ;
}
public class toy : joy
{
public void print()
{
Console.WriteLine(id);
}
}
public class Program
{
public static void Main()
{
toy r = new toy();
r.print();
Console.ReadKey();
}
}
উপরের কোডটা রান করে দেখো ।
তাহলে আমরা , দেখতেই পেলাম - শুধু ঐ টাইপ-এই নয় , তার বাইরেও -- তার ডেরাইভড ক্লাসেও আমি অ্যাকসেস করতে পারি ।।
এখন আমরা বাকি দুইটা নিয়ে কথা বলবো ।। Internal & Protected Internal |
আমরা যখন একটা শি শার্প প্রোগ্রাম কম্পাইল করাই , তখন তখন অ্যাসেম্বলি ফাইল ক্রিয়েট হয় ( এটা সাধারনত , মেশিন কোড ) , সেটা দুই ধরনের হতে পারে । একটা হলো - এক্সিকিউটেবল ( এর এক্সটেনশন হলো . ( .exe ) [ তুমি যখন , প্রোগ্রাম লিখো - তার ডান পাশেই সলুউশন এক্সপ্লোরারে - সেই প্রোগ্রামের নাম লিখা থাকে যার ভেতরে project কথাটি লিখা থাকে সেখানে ক্লিক করলেই অনেকগুলো অপশন দেখতে পাবে , Open Folder In File Explorer তে ক্লিক করলেই , এই প্রোগ্রামের ফাইল আসে , তাতে ক্লিক করে bin->Debug গেলেই , তোমার সেই এক্সিকিউটেবল ফাইল ( .exe) দেখতে পাবে ]। এটাই মেশিন কোড ( ইন্টারমিডিয়েট ল্যাংগুয়েজ, যেটা তোমার লিখা সোর্স কোড থেকে ক্রিয়েট হয় ) , যেটা অটোমেটিক জেনারেটেড হয় ।।
আচ্ছা , এখন এই অ্যাসেম্বলি দুই ধরনের হতে পারে , একটার এক্সটেনশন .exe আরেকটার এক্সটেনশন .dll || তার আগে , আমরা - আমাদের এই প্রোজেক্টের ভেতরে Add->New Project->Class Library ক্রিয়েট করলাম , আবার । ( খেয়াল রেখ , এটা কিন্তু - কনসল অ্যাপ্লিকেশন নয় , এটা একটা নতুন ক্লাস লাইব্রেরি ক্রিয়েট করছো - তুমি ) এখন তোমার ফুল প্রোজেক্ট আবার বিল্ড করাও , এখন তোমার খোলা নতুন ক্লাস লাইব্রেরি তে আগের মতো করে Open Folder In File Explorer->bin->Debug তে গেলেই , তোমরা নতুন আরেক ধরনের অ্যাসেম্বলি দেখতে পাবে , যার এক্সটেনশন .dll । আচ্ছা , এখন আরো একটা ক্লাস লাইব্রেরি খুলে ফেলো । ।
আচ্ছা , এবার আসি আসল কথায় । । এখন তুমি যে নতুন দুইটা অ্যাসেম্বলি আছে তার যে কোনো একটাতে internal অ্যাকসেস মোডিফায়ার ইউজ করে টাইপ মেম্বার ডিক্লেয়ার করো , তাহলে । তুমি ওই অ্যাসেম্বলি'র বাইরে সেটা কোনোভাবেই অ্যাকসেস করতে পারবে না ।।
এবার আসি , Protected Internal এর ব্যাপারে । যদি , তুমি কোনো - একটা অ্যাসেম্বলি'তে একটা ক্লাসে Protected Internal অ্যাকসেস মোডিফায়ার ইউজ করি , তাহলে সেটা শুধু সেই অ্যাসেম্বলিতেই নয় , অন্য যে কোনো অ্যাসেম্বলি'তে যদি , ওই ক্লাসের ডেরাইভড কোনো ক্লাস ব্যবহার কোনো ক্লাস ব্যবহার করা হয় , তাহলে সেখানে অ্যাকসেস করা যাবে । । আশা করি , বিষয়টি অনেকটাই পরিষ্কার হয়ে গেছে ।। এর পরের পর্বে , আমরা আলোচনা করবো - টাইপ এর ক্ষেত্রে অ্যাকসেস মোডিফায়ার এর ব্যবহার নিয়ে ।। তবে এখানে , কিছু ব্যপার আছে ----
তুমি যদি , প্রথম অ্যাসেম্বলি'র ভেতরের ক্লাসে একটা Protected Internal ইউজ করে একটা মেম্বার ডিক্লেয়ার করো ,
using System;
namespace AssemblyLibrary2
{
public class AssemblytwoClass2
{
protected internal int ID = 101;
}
}
তারপর সেটা অন্য একটা অ্যাসেম্বলি থেকে ইনহেরিটেন্স ক্লাসের মাধ্যমে অ্যাকসেস করতে চাও , তাহলে তোমায় । সেই অ্যাসেম্বলির রেফারেন্স-এ ক্লিক করে , এই AssemblyLibrary2 কে ইনক্লুড করতে হবে , তারপর using Directory ইউজ করে AssemblyLibrary2 ডিক্লেয়ার করতে হবে , তারপর নিচে দেখো , অন্য অ্যাসেম্বলি এর কোড , যেখান থেকে আমরা অ্যাকসেস করতে চাচ্ছে ---
using System;
using AssemblyLibrary2;
namespace Assembly1
{
public class AssemblyoneClass1
{
}
public class Joy : AssemblytwoClass2
{
public void print()
{
AssemblytwoClass2 r = new AssemblytwoClass2();
base.ID = 143;
Joy e = new Joy();
e.ID = 156;
Console.ReadKey();
}
}
}
আমরা ,প্রথমেই -- সেই AssemblyLibrary2 অ্যাসেম্বলির AssemblytwoClass2 ক্লাস থেকে Joy নামক ক্লাস ডেরাইভড করে নিলাম ।। এখন আমরা , জানি এই Joy ক্লাসটি সেই তার বেইস ক্লাস AssemblytwoClass2 এর সকল মেম্বার অ্যাকসেস করার ক্ষমতা রাখে , সুতরাং আমরা সেটাকে অ্যাকসেসও করলাম , কিন্তু বেইস ক্লাসের অব্জেক্ট ক্রিয়েট করে base অপারেটর ছাড়া আমরা সেটাকে অ্যাকসেস করতে পারবো না , চাইল্ড ক্লাসের অবজেক্ট ক্রিয়েট করে সহজেই অ্যাকসেস করতে পারবো , কারণ - চাইল্ড ক্লাস তার বেইস ক্লাসের সব মেম্বার অ্যাকসেস করার ক্ষমতা রাখে ।। এখন বিল্ড করলে , কোনো এরর দেখাবে না ।।
আশা করি , টাইপ মেম্বার এর ক্ষেত্রে অ্যাকসেস মোডিফায়ার নিয়ে আর কোনো ঝামেলা থাকার কথা নয় ।।
No comments:
Post a Comment