Như bạn có thể thấy trong đoạn mã bên dưới, phương thức DoStuff() được gọi trước Init() trong khi xây dựng một đối tượng Child.C# Làm thế nào để thực thi mã sau khi xây dựng đối tượng (postconstruction)
Tôi đang trong tình huống có nhiều lớp học cho trẻ em. Do đó, lặp lại một cuộc gọi đến phương thức DoStuff() ngay sau Init() trong hàm khởi tạo của mỗi đứa trẻ sẽ không phải là một giải pháp thanh lịch.
Có cách nào để tôi có thể tạo một số loại hàm tạo sau trong lớp cha sẽ được thực hiện sau hàm tạo của con không? Bằng cách này, tôi có thể gọi phương thức DoStuff() ở đó.
Nếu bạn có bất kỳ ý tưởng thiết kế nào khác có thể giải quyết được vấn đề của tôi, tôi cũng muốn nghe nó!
abstract class Parent
{
public Parent()
{
DoStuff();
}
protected abstract void DoStuff();
}
class Child : Parent
{
public Child()
// DoStuff is called here before Init
// because of the preconstruction
{
Init();
}
private void Init()
{
// needs to be called before doing stuff
}
protected override void DoStuff()
{
// stuff
}
}
Tìm thấy liên kết này hiển thị thứ tự xây dựng ... http://www.csharp411.com/c-object-initialization/ về cơ bản cho biết rằng hàm tạo cá thể có nguồn gốc của bạn là cuối cùng trong danh sách công cụ cần làm. Tôi nghĩ rằng kéo DoStuff ra khỏi constructor lớp cơ sở và rõ ràng gọi nó là cách tiếp cận trực tiếp nhất, hoặc cung cấp một lớp cơ sở Init có thể được ghi đè. – deepee1
+1: Tôi không biết tại sao nhưng tôi luôn (sai) cho rằng hàm tạo con được gọi là đầu tiên; đó là lý do tại sao tôi luôn luôn sử dụng: base() trong các hàm tạo của tôi. Cảm ơn vì đã giáo dục tôi. – NotMe