tôi đang cố gắng hiểu sự cần thiết của override và ảo trong C#, vì vậy tôi đã viết đoạn mã sau:Nếu lớp dẫn xuất không ghi đè lên phương thức, phiên bản nào sẽ được gọi?
using System;
namespace Override
{
class Base
{
public virtual void method()
{
Console.WriteLine("Base method");
}
}
class Derived : Base
{
public override void method()
{
Console.WriteLine("Derived method");
}
}
class Program
{
static void Main(string[] args)
{
Derived d = new Derived();
d.method();
}
}
}
Và tôi đã mong đợi "phương pháp nguồn gốc" để được gọi và printed.Then tôi đã viết đoạn code sau đây mà không bằng cách sử dụng kết hợp ảo/ghi đè.
using System;
namespace Override
{
class Base
{
public void method()
{
Console.WriteLine("Base method");
}
}
class Derived : Base
{
public void method()
{
Console.WriteLine("Derived method");
}
}
class Program
{
static void Main(string[] args)
{
Derived d = new Derived();
d.method();
}
}
}
Và tôi nhận được cùng một kết quả tức là "Mã nguồn gốc" được gọi và in. Câu hỏi của tôi là nếu mã hoạt động mà không có ảo/ghi đè như tôi mong đợi, chúng cần gì? hoặc tôi đang thiếu một cái gì đó ở đây?
Bạn không nhận được cảnh báo trong phương pháp thứ hai về việc ẩn phương pháp? "'Derived.Method()' ẩn thành viên kế thừa Base.Method() '. Sử dụng từ khóa mới nếu ẩn được dự định. \t" – Sayse
Cảm ơn tất cả các câu trả lời, bây giờ tôi rõ ràng với khái niệm này – ZoomIn