您的位置:首页 > 移动开发 > Objective-C

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

2010-09-25 17:13 387 查看
    以下记载关于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;

...

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息