ইন্টারফেসের জন্য abstract
, যোগ বা এমনকি public
কীওয়ার্ডগুলি অতিরিক্ত কাজ হবে, সুতরাং আপনি এগুলি বাদ দিন:
interface MyInterface {
void Method();
}
সিআইএলে, পদ্ধতিটি চিহ্নিত করা হয় virtual
এবং abstract
।
(নোট করুন যে জাভা ইন্টারফেস সদস্যদের ঘোষণার অনুমতি দেয় public abstract
)।
বাস্তবায়নকারী শ্রেণীর জন্য কিছু বিকল্প রয়েছে:
অ-ওভাররিজেবল : সি # তে শ্রেণিটি পদ্ধতিটি যেমন ঘোষণা করে না virtual
। এর অর্থ এটি একটি উদ্ভূত শ্রেণিতে (কেবল লুকানো নয়) ওভাররাইড করা যাবে না। সিআইএলে পদ্ধতিটি এখনও ভার্চুয়াল (তবে সিল করা) কারণ এটি অবশ্যই ইন্টারফেসের প্রকারের ক্ষেত্রে বহুবর্ষ সমর্থন করে।
class MyClass : MyInterface {
public void Method() {}
}
ওভাররিডেবল : সি # এবং সিআইএল উভয়ই পদ্ধতিটি virtual
। এটি পলিমারফিক প্রেরণে অংশ নেয় এবং এটি ওভাররাইড করা যায়।
class MyClass : MyInterface {
public virtual void Method() {}
}
সুস্পষ্ট : এটি কোনও শ্রেণীর জন্য একটি ইন্টারফেস বাস্তবায়ন করার উপায় তবে ক্লাসের পাবলিক ইন্টারফেসে ইন্টারফেসের পদ্ধতিগুলি সরবরাহ করে না। সিআইএল-এ পদ্ধতিটি private
(!) হবে তবে এটি এখনও ইন্টারফেসের প্রকারের রেফারেন্স থেকে শ্রেণির বাইরে থেকে কলযোগ্য হবে। সুস্পষ্ট বাস্তবায়নগুলি অ-ওভাররিডযোগ্য। এটি সম্ভব কারণ একটি সিআইএল নির্দেশিকা রয়েছে ( .override
) যা এটি প্রয়োগ করছে এমন ব্যক্তিগত ইন্টারফেস পদ্ধতির সাথে ব্যক্তিগত পদ্ধতির লিঙ্ক করবে।
[সি #]
class MyClass : MyInterface {
void MyInterface.Method() {}
}
[CIL]
.method private hidebysig newslot virtual final instance void MyInterface.Method() cil managed
{
.override MyInterface::Method
}
ভিবি.এনইটি তে, আপনি বাস্তবায়নকারী ক্লাসে ইন্টারফেস পদ্ধতির নামও উপনাম করতে পারেন।
[VB.NET]
Public Class MyClass
Implements MyInterface
Public Sub AliasedMethod() Implements MyInterface.Method
End Sub
End Class
[CIL]
.method public newslot virtual final instance void AliasedMethod() cil managed
{
.override MyInterface::Method
}
এখন, এই অদ্ভুত ঘটনাটি বিবেচনা করুন:
interface MyInterface {
void Method();
}
class Base {
public void Method();
}
class Derived : Base, MyInterface { }
যদি Base
এবং Derived
একই সমাবেশে ঘোষিত হয় তবে Base::Method
সংকলকটি ভার্চুয়াল এবং সিল করে দেবে (সিআইএল), যদিও Base
ইন্টারফেসটি কার্যকর করে না।
যদি Base
এবং Derived
বিভিন্ন সমাবেশে থাকে, অ্যাসেম্বলিকে সংকলন করার সময়, সংকলকটি Derived
অন্য সমাবেশটি পরিবর্তন করবে না, সুতরাং এটিতে কোনও সদস্যকে পরিচয় করিয়ে দেওয়া হবে এটির Derived
জন্য একটি স্পষ্ট বাস্তবায়ন MyInterface::Method
হবে কেবলমাত্র কলটি অর্পণ করবে Base::Method
।
সুতরাং আপনি দেখতে পাচ্ছেন, প্রতিটি ইন্টারফেস পদ্ধতির প্রয়োগের অবশ্যই পলিমারফিক আচরণকে সমর্থন করা উচিত এবং এটি অবশ্যই সিআইএল-তে ভার্চুয়াল হিসাবে চিহ্নিত করা উচিত, যদিও সংকলকটি এটি করতে হুপের মধ্য দিয়ে যেতে হবে।