9.5 在 C# 中使用 F# 庫

來源:互聯網
上載者:User

標籤:f#   函數編程   實用函數編程   互操作   

9.5 在 C# 中使用 F# 庫

 

像 C# 一樣,F# 也是一種靜態類型的語言,就是說,編譯器知道每個值的類型,以及類方法和屬性的簽名。對於與 C# 的互通性來說,這是非常重要的,因為,編譯器可以產生代碼,看起來就像普通的 .NET 庫。

 

與其他 .NET 語言的互通性

 

F# 和 C# 或 VB.NET 之間的互通性是非常平滑的,相比有 .NET 實現的動態類型的語言,比如 Python、Ruby、JavaScript。這些語言的編譯器不知道方法所要求的參數類型,是 int,還是比如Customer,因此,使用 C# 3.0 時,要利用這些語言寫的代碼是比較困難的。通常,甚至不知道對象是否包含具有特定名字的方法,所以,C# 代碼看應該像這樣:

 

obj.InvokeMethod("SayHello", newobject[] { "Tomas" });

 

這個例子指定方法的名字為一個字串,並以數組的方式傳遞參數值給方法。對於許多語言來說,這是一個重要的問題,所以,C# 4.0 引入了動態類型,它允許這樣寫:

 

obj.SayHello("Tomas");

obj.SaiHello("Tomas");

 

這個文法與正常的方法調用相同,但有一個重要的區別。我們還添加另一個方法調用,但故意用了一個不存在的方法名。這將正確編譯,因為方法的名字在內部表示成字串,就像在前面的例子一樣。問題要到已耗用時間才會發現。F# 是靜態類型的事實說明,我們不必擔心出現這種情況:我們可以依靠編譯器發現類似的錯誤,在調用到其他 C# 代碼時。

 

當建立要在 C# 中使用的 F# 庫,我們需要區分兩種 F# 構造。第一種包括帶成員的類或記錄,它就是以標準的 C# 類出現的,使用起來沒有任何麻煩;第二種包括值或高階函數,以非標準方式編譯,很難在 C# 中使用。我們先看一個第一種情況的例子。

9.5 在 C# 中使用 F# 庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.