Tôi đang cố gắng tạo một đoạn mã nhỏ trong F #. Ý tưởng là tôi sẽ có một giao diện xác định một vài phương thức, thuộc tính và sự kiện. Sử dụng giao diện này, tôi muốn định nghĩa một lớp trừu tượng (có một kiểu generic) sẽ thực hiện một số thuộc tính/phương thức nhưng không phải tất cả các thành viên được định nghĩa trong giao diện. Trách nhiệm để xác định tất cả các thành viên sẽ được trên các lớp học có nguồn gốc.Giao diện và lớp trừu tượng trong F #
Cho đến giờ tôi bị kẹt với giao diện và lớp trừu tượng. Những vấn đề tôi đang gặp:
- Định nghĩa lớp trừu tượng không nhận ra định nghĩa giao diện
- Tôi không chắc chắn cách định nghĩa các thành viên trừu tượng cho giao diện trong lớp trừu tượng
Giao diện biên dịch tốt nhưng lớp trừu tượng có nhiều lỗi. Các thông điệp được bao gồm trong mã số
Tất cả nhận xét, chỉnh sửa, gợi ý, v.v. Vì đây là thử nghiệm đầu tiên của tôi trên F #, có lẽ có rất nhiều lỗi để chỉ ra.
Code tôi có cho đến nay
định nghĩa giao diện
namespace A
type IValueItem =
interface
[<CLIEvent>]
abstract member PropertyChanged :
Control.IEvent<System.ComponentModel.PropertyChangedEventHandler,
System.ComponentModel.PropertyChangedEventArgs>
abstract ConvertedX : double with get, set
abstract Y : double with get, set
abstract member CreateCopy : obj
abstract member NewTrendItem : obj
end
Và lớp trừu tượng
namespace A
[<AbstractClass>]
type ValueItem<'TX>() =
[<DefaultValue>]
val mutable _y : double
let _propertyChanged = new Event<_>()
// ERROR: This type is not an interface type
// ERROR: The type 'obj' is not an interface type
// ERROR: The type 'IValueItem' is not defined
interface IValueItem with
// ERRROR No abstract or interface member was found that corresponds to this override
[<CLIEvent>]
member this.PropertyChanged :
Control.IEvent<System.ComponentModel.PropertyChangedEventHandler,
System.ComponentModel.PropertyChangedEventArgs>
= _propertyChanged.Publish
// This definition is incomplete, should be abstract
member ConvertedX : double with get, set
// ERROR: Incomplete structured construct at or before this point in pattern
member CreateCopy() : obj
member NewTrendItem() : obj
abstract X : 'TX with get, set
member this.Y
with get() = this._y
and set(value) =
if this._y <> value then
this._y <- value
this.NotifyPropertyChanged("Y")
member this.NotifyPropertyChanged(propertyName) =
this.PropertyChanged.Trigger(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName))
Cảm ơn sự giúp đỡ của bạn. Tôi vẫn chỉ bị mắc kẹt với sự thừa kế và trọng tài của các phương pháp. Lớp trừu tượng bây giờ định nghĩa 'thành viên this.NewTrendItem() = null' và lớp dẫn xuất trông giống như' type NumberItem() = kế thừa ValueItem() ...... ghi đè this.NewTrendItem() = new NumberItem () '. Tuy nhiên, tôi nhận được _Không tìm thấy thành viên trừu tượng hoặc giao diện nào tương ứng với lỗi override_ này. –
user6423491
Không có vấn đề, hy vọng nó giúp đỡ. Tôi đã cập nhật nhận xét để cung cấp ví dụ về cách bạn có thể làm điều đó. –