Xem xét giao diện này:Tại sao `đơn vị` được xử lý khác nhau bởi hệ thống kiểu F # khi được sử dụng làm đối số chung cho giao diện?
type A<'a> =
abstract X : 'a
Hãy cố gắng thực hiện nó với int
như một cuộc tranh luận chung:
{ new A<int> with member this.X = 5 } // all is well
Bây giờ, chúng ta hãy cố gắng unit
cho một cuộc tranh cãi:
// Compiler error: The member 'get_X : unit -> unit' does not have the correct type to override the corresponding abstract method.
{ new A<unit> with member this.X =() }
Bây giờ, nếu chúng tôi xác định giao diện không chung chung, mọi thứ cũng hoạt động tốt:
type A_int =
abstract X : int
{ new A_int with member this.X = 5 } // works
type A_unit =
abstract X : unit
{ new A_unit with member this.X =() } // works as well!
Tôi có thể làm gì để khắc phục sự cố này không?
Trong C# không thể có hàm chung trả về 'void' - xem ví dụ https://programmers.stackexchange.com/questions/131036/why-is-void-not-allowed-as-a- generic-type-in-c. Có thể các hạn chế tương tự đang được áp dụng cho mã F # trong trường hợp này. –