Monday, October 16, 2017

C# For Beginners , Part -30 ( Explicit Interface Implementation)

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

ধরো , তুমি দুইটি ইন্টারফেইস ক্রিয়েট করেছো ।। যাদের ঠিক একই নামের দুইটি মেথোড ডিক্লেয়ার করা হয়েছে ।। তারপর , তুমি একটা ক্লাস ক্রিয়েট করলে ,যেই ক্লাস একই সাথে সেই দুইটা ইন্টারফেইস থেকে ডেরাইভড হয়েছে ।। এখন কি কি ধরনের ঘটনা ঘটতে পারে ???

using System;

interface Iin
{
    void print();
}
interface Iin2
{
    void print();
}

public class cl:Iin,Iin2
{
    public void print()
    {
        Console.WriteLine("Hey Trainer");
    }
}
 public class Program
{
    public static void Main()

    {
        cl u = new cl();
        u.print();
        Console.ReadKey();
    }
  
}

উপরের কোড রান করাও , কোনো এরর পাবেও না ।। বাট , একটা জিনিস খেয়াল করো যে --আমাদের দুইটা ইন্টারফেইস-এরই মেথোড ইমপ্লিমেন্টেশন করা লাগতো ।। বাট , আমি কিন্তু ক্লাসে একটা মেথোড ইমপ্লিমেন্টেশন করেছি । কিন্তু , আমায় কোনো এরর দেখায় নি , কারণ দুইটা ইন্টারফেইসেরই মেথোড নেইম একই ।। এটা না হয় , হলো - কিন্তু, আমাদের কন্সল স্ক্রিনে যে আউটপুট'টা দেখলাম সেটা আসলে কোন ইন্টারফেইস এর মেথোডের ???? বলতে পারবা ???
জানি , পারবে না ।।

আমি যদি বলি , দুইটা আলাদা আলাদা ইন্টারফেইস এর জন্য আলাদা আলাদা জিনিস আউটপুটে দেখাবো , তাহলে কি করতে হবে ?? বলো তো ----------------

using System;

interface Iin
{
    void print();
}
interface Iin2
{
    void print();
}

public class c1:Iin,Iin2
{
// Explicit Interface Implementation
     void Iin.print()
    {
        Console.WriteLine("Hey First Interface Trainer");
    }
//Explicit Interface Implementation
     void Iin2.print()
    {
        Console.WriteLine("Hey Second Interface Trainer");
    }
}
 public class Program
{
    public static void Main()

    {
         Iin u = new c1();
         Iin2 y = new c1();
        u.print();
        y.print();
        Console.ReadKey();
    }
  
}

তাহলে , আমরা বুঝতে পারলাম - কিভাবে  Explicit Interface Implementation আসলে কি ???? এবং এটাকে কিভাবে ইমপ্লিমেন্ট করতে হয় ?? আরেকটা কথা আমাদের মনে রাখতে হবে , এই ক্ষেত্রে মেথোড ইমপ্লিমেন্ট করবার সময় কখনোই অ্যাকসেস মোডিফায়ার হিসেবে public / private etc. ইউজ করা যাবে  না ।। আমরা , মেইন মেথোডের ভেতরে আলাদা আলাদা ইন্টারফেইসের জন্য আলাদা আলাদা রেফারেন্স ভ্যারিয়েবল ক্রিয়েট করেছি ।। আমরা টাইপ ক্যাস্টিং এর মাধ্যমেও এটা করতে পারি , চলো দেখে আসি ---------------------------

using System;

interface Iin
{
    void print();
}
interface Iin2
{
    void print();
}

public class c1:Iin,Iin2
{
     void Iin.print()
    {
        Console.WriteLine("Hey First Interface Trainer");
    }
     void Iin2.print()
    {
        Console.WriteLine("Hey Second Interface Trainer");
    }
}
 public class Program
{
    public static void Main()

    {
         c1 u = new c1();
         c1 y = new c1();
        ((Iin)u).print();
        ((Iin2)y).print();
        Console.ReadKey();
    }
}

Explicit Interface Implementation করবার পর , তুমি যদি আবার মেইন মেথোডে  c1.print(); এরকম লিখে ফেলো , তাহলে কিন্তু হবে না ।। কারণ , Explicit Interface Implementation করে ফেলেছো , সুতরাং এখন আর তোমার ওইভাবে কল করা যাবে না ।।

আচ্ছা ধরো , তুমি ক্লাসের ভেতরে নরমাল ইমপ্লিমেন্টেশন ও Explicit Interface Implementation একইসাথে ইউজ করতে চাও তাহলে , চলো কি হবে একটু দেখে আসি ।।

using System;

interface Iin
{
    void print();
}
interface Iin2
{
    void print();
}

public class c1:Iin,Iin2
{
     public void print()
    {
        Console.WriteLine("Hey First Interface Trainer");
    }
     void Iin2.print()
    {
        Console.WriteLine("Hey Second Interface Trainer");
    }
}
 public class Program
{
    public static void Main()

    {
         c1 u = new c1();
         c1 y = new c1();
        
        ((Iin)u).print();
        ((Iin2)y).print();
        Console.ReadKey();
    }
  
}

এখন মেইন মেথোডে যদি - তুমি টাইপ ক্যাস্টিং না করে - নরমালি কল করো এইভাবে c1.print() ; তাহলে কিন্তু , এখন আর এরর দেখাবে না ।। তোমায় , এখন কন্সল স্ক্রিনে নরমালি ইমপ্লিমেন্টন যে মেথোডের করা হয়েছে , তাই শো করবে ।।  এখন ডিফল্ট ভাবেই নরমাল ইমপ্লিমেন্টেশন মেথোড'কেই কল করা হবে ।। তো চলো নিচের কোড'টি লিখে আরো ক্লিয়ার হয়ে নেই ----


using System;

interface Iin
{
    void print();
}
interface Iin2
{
    void print();
}

public class c1:Iin,Iin2
{
     public void print()
    {
        Console.WriteLine("Hey First Interface Trainer");
    }
     void Iin2.print()
    {
        Console.WriteLine("Hey Second Interface Trainer");
    }
}
 public class Program
{
    public static void Main()

    {
         c1 u = new c1();
          u .print();
        ((Iin2)u).print();
        Console.ReadKey();
    }
  
}

তাহলে , এক্সপ্লিসিট ইন্টারফেইস ইমপ্লিমেন্টেশন নিয়ে অনেক কথা হলো ।। আজ এইটুকুই ------










No comments:

Post a Comment