F#入门-第五章 F#开发实例-第三节 最好知道的注意事项

    以下记载关于Windows编程时,最好知道一下的注意事项。

枚举的处理
    下例中显示如何进行象按钮等控件的Anchor属性中AnchorStyles这样的枚举的设置。

枚举的处理
//OR运算
button.Anchor <- AnchorStyles.Left ||| AnchorStyles.Right;;
//运算参考:比较老式的处理方法
button.Anchor <- Enum.combine[AnchorStyles.Left;AnchorStyles.Right];;
//指定空的时候
let settextattr (t:RichTextBox) =
        t.LanguageOption <- Enum.of_int(0);;
//      t.LanguageOption <- Enum.combine[];;


下溯
     将父类转换为子类叫做下溯。在F#中采用:?这个符号可以实现下溯。

例子1
match object_value with
        | :? string -> print_endline "string value"
        | :? int -> print_endline "int value"

 

例子2
try
        File.Copy(src,dst);
with
        | :? PathTooLongException -> msg "路径太长"
        | :? NotSupportedException -> msg "路径中含有冒号"
        | :? DirectoryNotFoundException -> msg "拷贝路径为Nothing或空文字列"
        | :? UnauthorizedAccessException -> msg "不能访问文件"
        | :? System.Security.SecurityException -> msg "没有必须的访问权限"


 可变类型
    通过“#类型名”,可以将父类的类型作为类型信息进行指定。

可变类型
let settext (c : #Control) = c.Text <- "text";;
//这样写意思相同
let settext (c : 'a when 'a :> Control) = c.Text <- "text";;


Boxing与Unboxing
    boxing是指相当于在C#中强制转换为object类型的操作。它的相反操作为Unboxing。F#中的obj类型相当与C#中的object类型。

obj类型的利用
//转换为obj类型
box 1;;
box "abc";;
//从obj类型返回到原来的类型
unbox<string> (box "abc");;
(unbox (box "abc") : string);;


    例如使用上述转换,使用System.Runtime.Serialization.Formatters.Binary,可以定义任意类型的数据的序列化函数。

Attribute
    可以将代码段使用[< ... >]的形式括起来。例如如果使用下例中定义的函数,编译器会发出警告。

System.Obsolete属性
[<System.Obsolete("旧版本的函数")>]
let old () = print_endline "old function";;


use
    相当于C#语言中的using语句。如果不使用let语句,而使用use语句,系统自动调用Dispose函数。

use的利用
use fs = new FileStream(fullpath,FileMode.Open,FileAccess.Read) in
fs.Read(bytes,0,Int32.of_int64 fs.Length) |> ignore;
...


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值