Có một cái gì đó như thế này này:Làm thế nào để thực hiện một lớp cơ sở với một phương pháp và chưa buộc các lớp có nguồn gốc để ghi đè lên nó?
public abstract class AAA
{
protected abstract virtual string ToString() // Error
{
// Base Stuff
}
}
public abstract class BBB : AAA
{
public override string ToString()
{
// Use base.ToString();
// More Stuff
}
}
Tôi đọc bài đăng khác (abstract method in a virtual class) phù thủy là khá giống như câu hỏi của tôi, nhưng có một sự khác biệt nhỏ. Tôi muốn AAA.ToString() để có một hành vi cơ sở và buộc lớp dẫn xuất ghi đè lên nó.
Tôi biết tôi có thể làm điều gì đó như thế này (cuộn xuống) nhưng tôi đang tìm kiếm một cách thích hợp.
public abstract class AAA
{
public abstract string ToString();
protected string ToString2()
{
// Base Stuff
}
}
public class BBB : AAA
{
public override string ToString()
{
// Use base.ToString2();
// More Stuff
}
}
tôi cũng có thể có thể làm cho một giao diện IAAA và xây dựng lớp BBB tôi như
public class BBB : AAA, IAAA { ... }
nhưng không nhìn đúng với tôi.
Cảm ơn, chỉnh sửa của bạn khiến tôi nhận ra một cái gì đó quan trọng! Ngay cả khi tôi sẽ tìm ra một cách kỳ diệu để định nghĩa ToString() trong lớp cơ sở và ép buộc ghi đè trong lớp dẫn xuất, đơn giản là không có cách nào tôi có thể ép buộc ghi đè để sử dụng ToString()! Tôi cũng tìm thấy bài đăng này của một MVP về buộc ghi đè: http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/c25b6477-b990-4284-abaf-801ddf18207c .Cảm ơn một lần nữa sir. – Tipx
Rất vui khi được phục vụ. Đó là bài viết của Marc Gravell ... ông cũng được biết đến trên SO quá :) –
Làm thế nào để so sánh với câu trả lời OP được đăng dưới đây? – Armbrat