명시 적 인터페이스 구현 보일러 플레이트 코드를 피하기 위해 인터페이스 대신 모든 추상 멤버와 추상 클래스를 사용하는 것이 좋습니다. 그래서 그 대신인터페이스 대신 추상 클래스를 사용하지 않는 이유는 무엇입니까?
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
의 나는주의 또는 의미의
[<AbstractClass>]
type MyAbstractClass() =
abstract Name : string
abstract Text : string
type MyClass() =
inherit MyAbstractClass()
override __.Name = "name"
override __.Text = "text"
아무 단어 나 여기 알고 있어야이있을 것이다?
인터페이스와 추상 기본 클래스 사이를 결정하는 경우 두 가지를 모두 사용해보십시오. 구현자가 * 상속 할 수있는 추상 기본 유형을 제공하고 인터페이스를 구현하도록합니다. 그런 다음 ABC가 아닌 인터페이스에 대한 참조를 승인하십시오. 이는 모든 시나리오에서 작동하지 않습니다 (예 : 코드에서 실제로 구현할 때마다 ABC에있는 코드가 필요하며 대체 구현을 허용 할 수 없음). 그러나 종종 좋은 아이디어가 될 수 있습니다. –
@Merlyn Morgan-Graham - 우수 제안! 나는이 접근법을 시도하고 있으며, 지금까지 두 세계의 장점을 최대한 발휘하여 노력하고 있습니다. –