เราไม่สามารถพูดคุยเกี่ยวกับสมาชิกเสมือนจริงโดยไม่ต้องหมายถึงความแตกต่าง ในความเป็นจริงฟังก์ชั่นคุณสมบัติตัวทำดัชนีหรือเหตุการณ์ในคลาสฐานที่ทำเครื่องหมายเป็นเสมือนจะช่วยให้แทนที่จากคลาสที่ได้รับ
โดยค่าเริ่มต้นสมาชิกของคลาสนั้นไม่ใช่เสมือนจริงและไม่สามารถทำเครื่องหมายว่าเป็นตัวดัดแปลงแบบสแตติก, นามธรรม, ส่วนตัวหรือแทนที่
ตัวอย่าง
ของ Let พิจารณาToString ()วิธีการในSystem.Object เนื่องจากวิธีนี้เป็นสมาชิกของ System.Object ซึ่งสืบทอดมาในคลาสทั้งหมดและจะมีวิธีการ ToString () ให้กับพวกเขาทั้งหมด
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
ลองพิจารณาว่าเราต้องการเปลี่ยนพฤติกรรมมาตรฐานของวิธีการ ToString () ที่สืบทอดมาจาก System.Object ในระดับ บริษัท ของเรา เพื่อให้บรรลุเป้าหมายนี้ก็เพียงพอที่จะใช้คีย์เวิร์ด override เพื่อประกาศการใช้งานเมธอดนั้นอีก
public class Company
{
...
public override string ToString()
{
return $"Name: {this.Name}";
}
}
ตอนนี้เมื่อเมธอดเสมือนถูกเรียกใช้รันไทม์จะตรวจสอบสมาชิกที่แทนที่ในคลาสที่ได้รับและจะเรียกมันถ้ามี ผลลัพธ์ของแอปพลิเคชันของเราจะเป็น:
Name: Microsoft
ในความเป็นจริงถ้าคุณตรวจสอบคลาส System.Object คุณจะพบว่าวิธีการทำเครื่องหมายเป็นเสมือน
namespace System
{
[NullableContextAttribute(2)]
public class Object
{
....
public virtual string? ToString();
....
}
}