Monday, October 16, 2017

C# For Beginners , Part -29 ( Interfaces- Basics )

          আমরা আজকে ইন্টারফেইস এর বেসিক নিয়ে আলোচনা করবো ।।


 ইন্টারফেইস অনেকটা ক্লাসের মতোই ।। ক্লাসের মতোই , মেথোড - প্রোপারটি'স ইত্যাদি থাকে , বাট ইমপ্লিমেন্টেশন থাকে না শুধু ডিক্লেয়ারেশন থাকে ।। কেমন ??? চলো দেখে আসি ---------

                                 interface Istudent
                         {
                          void print();
                          }


খেয়াল করো  , আমরা এখানে ইন্টারফেইস এর নাম দিয়েছি , Istudent ।। এটা কিন্তু আমার ইন্টারফেইস এর নাম না ।। আমার ইন্টারফেইস এর নাম শুধু  student । কিন্তু , ইন্টারফেইস ব্যবহার এর সময় এই ক্যাপিটাল লেটার এর I সাফিক্স হিসেবে  ব্যবহার করি ।।

আচ্ছা , এখন আমরা  void print(); এর মাধ্যমে শুধু - একটা মেথোড ডিক্লেয়ার করেছি , বাট ইমপ্লিমেন্টেশন করি নাই ।। নিচের মতো করে কখনোই মেথোড ইমপ্লিমেন্টেশন করা যাবে না , কিন্তু ----

                                       void print()
                     {
                        Console.WriteLine("Hello Joy");
                      }

এভাবে , ইন্টারফেইস এর ভেতরে  মেথোড ইমপ্লিমেন্টেশন করলে , কম্পাইল টাইম এরর খাবা ।।


তুমি ইন্টারফেইস এর ভেতরে যে মেম্বার গুলো ইউজ করবে , সেগুলো'র ডিক্লেয়ার করার সময় কখনোই অ্যাকসেস মোডিফায়ার ইউজ করা যাবে না ।। এরা , ডিফল্ট ভাবেই অটোমেটিক পাবলিক ।। শুধু , শুধু নিচের মতো করে ইউজ করলে এরর খাবা ।।

interface Istudent

{



    public void print();
   

}

              সুতরাং , আমরা  অ্যাকসেস মোডিফায়ার ইউজ করবো না ।।

আরেকটা গুরুত্বপূর্ণ জিনিস হলো , আমরা ক্লাসে যেরকম বিভিন্ন ক্লাস ফিল্ড ইউজ করি , ইন্টারফেইস -এ কোনো ক্লাস ফিল্ড ইউজ করা যাবে না , নিচের মতো করে --------------

interface Istudent
{
    string name;
    int roll;
    int passmark;
    double percentage;
}

তাহলে উপরের মতো ক্লাস ফিল্ড ইউজ করলে , কম্পাইল টাইম এরর খাবা ।।


আরেকটা ইম্পরট্যান্ট জিনিস হলো , আমরা ইন্টারফেইস এর জন্য ইন্সট্যান্স ক্রিয়েট করতে পারবো না ।। কারণ , নরমালি আমরা বুঝতেই পারছি যে -- এর ভেতরে শুধু ডিক্লেয়ারেশন রয়েছে , কোনো ইমপ্লিমেন্টেশন নাই , কোনো ক্লাস ফিল্ড নেই , তাই এর কোনো অব্জেক্ট'ও ক্রিয়েট করা যাবে না,নিচের মতো করে  ।।

using System;

interface Istudent
{

    void print();

}


public class Program
{
    public static void Main()
    {
        Istudent s = new Istudent();
    }
}

তাই ইন্টারফেইস এর কোনো অব্জেক্ট ক্রিয়েট করা যায় না ।।


খুব গুরুত্বপূর্ণ একটা বিষয় হলো -- আমরা কিনতু ইন্টারফেইস থেকে ক্লাস ইনহেরিটেড করতে পারি ।।তবে একটা জিনিস মাথায় রাখতে হবে , ইন্টারফেইস এর সকল ডিক্লেয়ারেশন এর ইমপ্লিমেন্টেশন এর ডিরাইভড ক্লাসে থাকতে হবে , অন্যথায় এরর খাবা ।।  চলো দেখে আসি ,

using System;

interface Istudent
{

    void print();

}

public class joy:Istudent
{
    public void print()
    {
        Console.WriteLine("Joy");
    }
}

public class Program
{
    public static void Main()
    {
        joy j = new joy();
        j.print();
        Console.ReadKey();
    }
}

আমরা , এখানে ইন্টারফেইস এর ভেতরে শুধু  print মেথোড'টা ডিক্লেয়ার করেছি ।। আর তার ইমপ্লিমেন্টেশন করেছি , joy নামক তার ডিরাইভড ক্লাসে ।।আর হ্যা অবশ্যই , ইন্টারফেইস এর মেথোড আর ক্লাস এর ভেতরে যে মেথোড ইমপ্লিমেন্টেশন করবো , দুইটারই  Signature Of Method
একই থাকতে হবে ।।

 এখন আমরা যখন ইনহেরিটেন্স শিখি , তখন একটা বিষয় শিখেছিলাম ।। সেটা হলো - কোনো একটা ক্লাস এক এর অধিক ক্লাস থেকে ইনহেরিটেড করা যায় না ।। কিন্তু , এখানে আমরা একটা ক্লাস কে একাধিক ইন্টারফেইস থেকে ইনহেরিট করতে পারবা , তবে দুইটা ইন্টারফেইস এরই সকল প্রকার ডিক্লেয়ারেশন কিন্তু ক্লাসে ইমপ্লিমেন্টেশন করতে হবে -----

using System;

interface Istudent
{

    void print();

}
interface Iname
{
    void print1();
}

public class joy:Istudent,Iname
{
    public void print()
    {
        Console.WriteLine("Joy");
    }
    public void print1()
  {
    Console.WriteLine("Mollick");
  }
}

public class Program
{
    public static void Main()
    {
        joy j = new joy();
        j.print();
        j.print1();
        Console.ReadKey();
    }
}

আশা করি , বিষয়গুলো কিছুটা হলেও বুঝতে পারছো ।।

ধরো আমরা একটা ইন্টারফেইস থেকে ইনহেরিট করে আরো একটা ইন্টারফেইস ক্রিয়েট করলাম , এখন আমি যদি শেষের ইন্টারফেইস থেকে ইনহেরিটেড করে একটা ক্লাস ক্রিয়েট করি , তাহলে কিন্তু আমাদের , যেহেতু দ্বিতীয় ইন্টারফেইস'টা প্রথম ইন্টারফেইস থেকে ইনহেরিটেড করা হয়েছে - তাই
আমাদের ক্লাসে এই দুইটা ইন্টারফেইস এরই ডিক্লেয়ারেশন গুলো ইমপ্লিমেন্ট করতে হবে ।। চলো দেখে নেই ----------

using System;

interface Istudent
{

    void print();

}
interface Iname:Istudent
{
    void print1();
}

public class joy:Iname
{
    public void print()
    {
        Console.WriteLine("Joy");
    }
    public void print1()
  {
    Console.WriteLine("Mollick");
  }
}

public class Program
{
    public static void Main()
    {
        joy j = new joy();
        j.print();
        j.print1();
        Console.ReadKey();
    }
}

তাহলে আমরা বুঝতে পারলাম যে - আমরা যদিও ক্লাসটা শুধুমাত্র Iname থেকে ইনহেরিটেড করেছি , তারপরো এই ইন্টারফেইস এর মেম্বার গুলো ছাড়াও , Istudent ইন্টারফেইসের মেম্বারগুলোও ইমপ্লিমেন্টেশন করতে হয়েছে কারণ , Iname ইন্টারফেইস আবার Istudent ইন্টারফেইস থেকে ইনহেরিটেড হয়েছে ।।


সবশেষে, একটা গুরুত্বপূর্ণ বিষয় হলো - আমরা ইন্টারফেইস এর কোনো অব্জেক্ট ক্রিয়েট করতে পারবো না ঠিকই ---- কিন্তু , ইন্টারফেইস এর রেফারেন্স ভ্যারিয়েবল-এ ক্লাস এর অব্জেক্ট অ্যাসাইন করাতে পারবো ।। নীচে দেখে আসি , চলো -----------------

using System;

interface Istudent
{

    void print();

}

public class joy:Istudent
{
    public void print()
    {
        Console.WriteLine("Joy");
    }
 
}

public class Program
{
    public static void Main()
    {
        Istudent j = new joy();
        j.print();
        Console.ReadKey();
    }
}

আমরা  joy নামের ক্লাসের অব্জেক্ট ক্রিয়েট করেছি , বাট অ্যাসাইন করেছি -- Istudent নামক ইন্টারফেইস এর ভ্যারিয়েবল j তে ।। যাই হোক আজ এইটুকুই --------------------------










No comments:

Post a Comment