Tôi đang xem xét việc sử dụng một lớp trừu tượng với tất cả các thành viên trừu tượng thay vì một giao diện để tránh việc thực hiện giao diện mã bảng nồi hơi rõ ràng. Vì vậy, thay vìLý do không sử dụng lớp trừu tượng thay vì giao diện?
type IMyInterface =
abstract Name : string
abstract Text : string
type MyClass() =
member __.Name = "name"
member __.Text = "text"
interface IMyInterface with
member this.Name = this.Name
member this.Text = this.Text
Tôi muốn có
[<AbstractClass>]
type MyAbstractClass() =
abstract Name : string
abstract Text : string
type MyClass() =
inherit MyAbstractClass()
override __.Name = "name"
override __.Text = "text"
Bất kỳ lời cảnh cáo hoặc ý nghĩa tôi cần phải nhận thức đây?
Nếu bạn đang đưa ra quyết định giữa giao diện và lớp cơ sở trừu tượng, bạn cũng có thể xem xét sử dụng cả hai. Cung cấp một loại cơ sở trừu tượng mà những người triển khai có thể * chọn * để kế thừa từ đó và có nó thực hiện một giao diện. Sau đó, chấp nhận tham chiếu đến giao diện, thay vì ABC. Điều này sẽ không hoạt động trong mọi tình huống (ví dụ: mã của bạn thực sự cần mã có trong ABC để tồn tại trên mọi triển khai cụ thể và không thể chấp nhận triển khai thay thế), nhưng thường có thể là một ý tưởng hay. –
@Merlyn Morgan-Graham - Đề xuất tuyệt vời! Tôi đang cố gắng tiếp cận này và cho đến nay nó đang làm việc rất tốt, cho tốt nhất của cả hai thế giới. –