当前位置:主页   - 电脑 - 网站开发 - ASP.Net
F#探险之旅(四):面向对象编程(下)
来源:网络   作者:   更新时间:2012-04-01
收藏此页】    【字号    】    【打印】    【关闭

  类的继承

  在前面(面向对象(中))介绍过的对象表达式中,已经涉及到了类的继承,我们可以覆盖类的成员实现,然后创建新类的实例。这一节里,我们来看看常规的继承机制,熟悉C#的开发人员会感到更亲切。

F# Code - 类的继承
#light
type Base = class
  val state : int
  new() = { state = 0}
end
type Sub = class
  inherit Base
  val otherState : int
  new() = { otherState = 1 }
end
let myObj = new Sub()
printfn "myObj.state = %i, myObj.otherState = %i"
  myObj.state
  myObj.otherState
  
System.Console.Read()

  运行结果为:

Output
myObj.state = 0, myObj.otherState = 1

  这里Base类为基类,有一个字段state,Sub继承了它,并有一个新字段otherState,下面的代码可以看到,此时Sub类继承了Base类的state字段。需要注意的是,这里的Base必须要有一个无参的构造函数,否则不能通过编译。其原因是,跟C#一样,在初始化派生类时会调用基类的构造函数,而F#中类没有默认的构造函数,所以必须显式添加构造函数。而如果基类的构造函数带有参数的话,派生类的构造函数写法也有所不同。

F# Code - 基类具有含参的构造函数
#light
type Base = class
  val state : int
  new(st) =
    { state = st}
    then
    printfn "Init base class"
end
type Sub = class
  inherit Base
  val otherState : int
  new() =
    { inherit Base(0)
     otherState = 1 }
    then
    printfn "Init sub class"
end
let myObj = new Sub()
printfn "myObj.state = %i, myObj.otherState = %i"
  myObj.state
  myObj.otherState
  
System.Console.Read()

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明