Tất cả tôi muốn làm là đảm bảo rằng lớp con của lớp mục thực hiện một tĩnh phương pháp và tôi muốn điều này phải được kiểm tra tại thời gian biên dịch để tránh các lỗi runtime.Làm thế nào tôi có thể buộc các lớp kế thừa để thực hiện một phương thức tĩnh trong C#?
lớp trừu tượng với phương pháp tĩnh dường như không làm việc:
ERROR: A static member cannot be marked as override, virtual, or abstract
public abstract class Item
{
public static abstract Item GetHistoricalItem(int id, DateTime pastDateTime);
}
public class Customer : Item
{
public static override Customer GetHistoricalItem(int id, DateTime pastDateTime)
{
return new Customer();
}
}
public class Address : Item
{
public static override Address GetHistoricalItem(int id, DateTime pastDateTime)
{
return new Address();
}
}
và giao diện không có vẻ làm việc một trong hai:
ERROR: Customer does not implement interface member GetHistoricalItem()
public class Customer : Item, HistoricalItem
{
public static Customer GetHistoricalItem(int id, DateTime pastDateTime)
{
return new Customer();
}
}
public class Address : Item, HistoricalItem
{
public static Address GetHistoricalItem(int id, DateTime pastDateTime)
{
return new Address();
}
}
interface HistoricalItem
{
Item GetHistoricalItem();
}
Có một số wo không rkaround cho điều này để có kiểm tra trình biên dịch nếu kế thừa các lớp học thực hiện một phương pháp tĩnh với một chữ ký nhất định hay không?
Tôi có một Hạng mục mà nhiều đối tượng khác nhau kế thừa, ví dụ: Khách hàng, địa chỉ, vv Và nếu một lớp là loại Item, thì tôi muốn có thể gọi một phương thức factory trên nó được gọi là GetHistoricalItem(). Vì vậy, tôi muốn có thể nói địa chỉ Address = Address.GetHistoricalItem (...). Và tôi muốn biết tại thời điểm biên dịch rằng tất cả các lớp học của tôi mà kế thừa mục làm điều này. Nó chỉ nên làm việc giống như cách nó làm cho các phương thức ví dụ. –
@EdwardTanguay đây là từ một thời gian dài trước đây, nhưng bạn tốt hơn hết nên tạo một số loại lớp Lịch sử (ví dụ) có chứa các phương thức bình thường để lấy địa chỉ từ đó. Đăng ký sẽ là một tên tốt cho ví dụ. –