new
মানে আপনার =
রেফারেন্সের ধরণ (বাম দিকে ) এর সম্মান করুন , যার ফলে রেফারেন্স ধরণের পদ্ধতি চলছে। যদি নতুন সংজ্ঞায়িত পদ্ধতিতে new
কীওয়ার্ড না থাকে তবে এটি যেমন রয়েছে তেমন আচরণ করা হয়। তদুপরি, এটি অ বহু-বহুজনিত উত্তরাধিকার হিসাবেও পরিচিত । তা হ'ল, "আমি উদ্ভূত শ্রেণিতে একটি ব্র্যান্ড নতুন পদ্ধতি তৈরি করছি যা বেস ক্লাসে একই নামে কোনও পদ্ধতির সাথে একেবারে কিছুই করার নেই” " - হুইটেকার বলেছেন
override
, যা অবশ্যই virtual
তার বেস শ্রেণিতে কীওয়ার্ডের সাথে ব্যবহার করা উচিত , এর অর্থ আপনার ওবিজেইসিটি ধরণের (ডান দিকের দিকের =
) সম্মান করুন , যার ফলে রেফারেন্স প্রকার নির্বিশেষে চলমান পদ্ধতিটি ওভার্রাইডেন। তদুপরি, এটি বহুবর্ষগত উত্তরাধিকার হিসাবেও পরিচিত ।
উভয় কীওয়ার্ড মনে রাখার আমার উপায় যে তারা একে অপরের বিপরীতে।
override
: virtual
পদ্ধতিটি ওভাররাইড করতে কীওয়ার্ডটি অবশ্যই সংজ্ঞায়িত করা উচিত। override
কীওয়ার্ড ব্যবহারের পদ্ধতি যা রেফারেন্স টাইপ নির্বিশেষে (বেস শ্রেণি বা উত্পন্ন শ্রেণীর রেফারেন্স) যদি এটি বেস শ্রেণীর সাথে তাত্ক্ষণিকভাবে চালিত হয় তবে বেস শ্রেণীর পদ্ধতিটি চলে runs অন্যথায়, উদ্ভূত শ্রেণীর পদ্ধতিটি চলে।
new
: কীওয়ার্ডটি কোনও পদ্ধতি দ্বারা ব্যবহৃত হয়, override
কীওয়ার্ডের বিপরীতে , রেফারেন্স টাইপটি গুরুত্বপূর্ণ। যদি এটি উত্পন্ন শ্রেণীর সাথে ইনস্ট্যান্ট হয় এবং রেফারেন্স টাইপটি বেস শ্রেণি হয় তবে বেস শ্রেণীর পদ্ধতিটি চলে। যদি এটি উদ্ভূত শ্রেণীর সাথে ইনস্ট্যান্ট হয় এবং রেফারেন্স টাইপটি ডেরিভড ক্লাস হয়, তবে উত্পন্ন শ্রেণীর পদ্ধতিটি চালিত হয়। যথা, এটি কীওয়ার্ডের বিপরীতে override
। তবে, আপনি যদি পদ্ধতিটিতে নতুন কীওয়ার্ড যুক্ত করতে ভুলে যান বা বাদ দেন, সংকলকটি new
কীওয়ার্ড ব্যবহৃত হওয়ার সাথে সাথে ডিফল্টরূপে আচরণ করে ।
class A
{
public string Foo()
{
return "A";
}
public virtual string Test()
{
return "base test";
}
}
class B: A
{
public new string Foo()
{
return "B";
}
}
class C: B
{
public string Foo()
{
return "C";
}
public override string Test() {
return "derived test";
}
}
প্রধান কল:
A AClass = new B();
Console.WriteLine(AClass.Foo());
B BClass = new B();
Console.WriteLine(BClass.Foo());
B BClassWithC = new C();
Console.WriteLine(BClassWithC.Foo());
Console.WriteLine(AClass.Test());
Console.WriteLine(BClassWithC.Test());
আউটপুট:
A
B
B
base test
derived test
নতুন কোড উদাহরণ,
একের পর এক মন্তব্য করে কোড সহ খেলুন।
class X
{
protected internal /*virtual*/ void Method()
{
WriteLine("X");
}
}
class Y : X
{
protected internal /*override*/ void Method()
{
base.Method();
WriteLine("Y");
}
}
class Z : Y
{
protected internal /*override*/ void Method()
{
base.Method();
WriteLine("Z");
}
}
class Programxyz
{
private static void Main(string[] args)
{
X v = new Z();
//Y v = new Z();
//Z v = new Z();
v.Method();
}