不使用抽象类而不是接口的原因?

Ste*_*sen 5 f#

我正在考虑使用一个抽象类与所有抽象成员而不是接口,以避免显式接口实现样板代码.而不是

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
Run Code Online (Sandbox Code Playgroud)

我有

[<AbstractClass>]
type MyAbstractClass() =
    abstract Name : string
    abstract Text : string

type MyClass() = 
    inherit MyAbstractClass()
    override __.Name = "name"
    override __.Text = "text"
Run Code Online (Sandbox Code Playgroud)

我应该在这里注意任何谨慎或含义的话语?

man*_*lds 8

只有你应该意识到并做出有意识决定的事情是一个类只能从一个类继承而是实现许多接口.


除此之外,有关使用抽象类或接口的一些建议:

  • 如果您预计要创建组件的多个版本,请创建一个抽象类.抽象类提供了一种简单易用的组件版本.通过更新基类,所有继承类都会随更改自动更新.另一方面,接口一旦创建就无法更改.如果需要新版本的接口,则必须创建一个全新的接口.
  • 如果您正在创建的功能在各种不同的对象中都有用,请使用界面.抽象类应主要用于密切相关的对象,而接口最适合为不相关的类提供通用功能.
  • 如果您正在设计小巧,简洁的功能,请使用接口.如果要设计大型功能单元,请使用抽象类.
  • 如果要在组件的所有实现中提供通用的实现功能,请使用抽象类.抽象类允许您部分实现您的类,而接口不包含任何成员的实现.

http://msdn.microsoft.com/en-us/library/scsyfw1d%28vs.71%29.aspx

就个人而言,我觉得这些建议都是正确的.另一方面,特别是界面一旦创建就无法更改.如果需要新版本的接口,则必须创建一个全新的接口.是一个非常重要的观点.