类的继承
在前面(面向对象(中))介绍过的对象表达式中,已经涉及到了类的继承,我们可以覆盖类的成员实现,然后创建新类的实例。这一节里,我们来看看常规的继承机制,熟悉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、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!