পলিমারফিজম উল্লেখ না করে আমরা ভার্চুয়াল সদস্যদের নিয়ে কথা বলতে পারি না । প্রকৃতপক্ষে, ভার্চুয়াল হিসাবে চিহ্নিত বেস ক্লাসে কোনও ফাংশন, সম্পত্তি, সূচক বা ইভেন্ট কোনও উত্পন্ন শ্রেণীর থেকে ওভাররাইডের অনুমতি দেবে।
ডিফল্টরূপে, কোনও শ্রেণীর সদস্যগুলি অ-ভার্চুয়াল এবং স্ট্যাটিক, বিমূর্ত, ব্যক্তিগত, বা ওভাররাইড সংশোধক হিসাবে চিহ্নিত করা যায় না।
উদাহরণ
আসুন বিবেচনা ToString () পদ্ধতি System.Object । কারণ এই পদ্ধতিটি সিস্টেমের সদস্য b অবজেক্টটি এটি সমস্ত শ্রেণিতে উত্তরাধিকার সূত্রে প্রাপ্ত এবং তাদের সকলকে টসস্ট্রিং () পদ্ধতি সরবরাহ করবে।
namespace VirtualMembersArticle
{
public class Company
{
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Company company = new Company() { Name = "Microsoft" };
Console.WriteLine($"{company.ToString()}");
Console.ReadLine();
}
}
}
পূর্ববর্তী কোডের আউটপুট হল:
VirtualMembersArticle.Company
আসুন বিবেচনা করুন যে আমরা আমাদের কোম্পানীর ক্লাসে সিস্টেম থেকে উত্তরাধিকার সূত্রে প্রাপ্ত উত্তোলন () পদ্ধতির মানক আচরণটি পরিবর্তন করতে চাই। এই লক্ষ্য অর্জনে ওভাররাইড কীওয়ার্ডটি সেই পদ্ধতির আরেকটি বাস্তবায়ন ঘোষণা করার জন্য যথেষ্ট।
public class Company
{
...
public override string ToString()
{
return $"Name: {this.Name}";
}
}
এখন, যখন ভার্চুয়াল পদ্ধতিটি আহ্বান করা হবে, রান-টাইম তার উত্পন্ন শ্রেণিতে একটি ওভাররাইডিং সদস্যের জন্য পরীক্ষা করবে এবং উপস্থিত থাকলে এটি কল করবে। আমাদের আবেদনের ফলাফল তখন হবে:
Name: Microsoft
আসলে, যদি আপনি সিস্টেমটি পরীক্ষা করেন b অবজেক্ট ক্লাসটি আপনি দেখতে পাবেন যে পদ্ধতিটি ভার্চুয়াল হিসাবে চিহ্নিত হয়েছে marked
namespace System
{
[NullableContextAttribute(2)]
public class Object
{
....
public virtual string? ToString();
....
}
}