在使用F#的一個奇蹟之前,您可以在用C#編寫的應用程序中使用F#函數。 熟悉功能語言F#你可以,例如,在這個地址:http://msdn.microsoft.com/ru-ru/magazine/cc164244.aspx 但在這裏,在我看來,F#功能語言是寫好各種數學函數的好方法(原諒我的重言式),但爲什麼要從麪包面向對象的語言,爲什麼把不知所云的代碼與F#中的WinForms或WebForms控件頁面一起使用?因爲我立即想知道如何從F#程序集調用一個函數。只是想說,因爲在編寫代碼時使用tipizaciâmi函數語言存在困難,所以在使用C#程序集中的F#函數時,這些困難只會增加。開始做生意。 創建一個包含C#控制檯應用程序和F#程序集的項目。 裝配中的F#我們需要一個文件MyFunctions。 FS。這裏我們介紹一些我們認爲用功能性語言編寫的特性。例如,即使是從RGB到YCbCr色彩空間的轉換函數數組位圖圖像(這只是一個示例)。進入F#中可以大致是這樣的:
open System
let RGB_to_YCbCr (r : double,g : double,b : double) =
let y = 0.299 * r + 0.587 * g + 0.114 * b in
let Cb = (-0.1687) * r - 0.3313 * g + 0.5 * b + 128.0 in
let Cr = 0.5 * r - 0.4187 * g - 0.0813 * b + 128.0 in
(y,Cb,Cr);
let RGB_to_YCbCr_v (v : _ array) =
RGB_to_YCbCr (v.[0], v.[1], v.[2]);
let Process (image : _ array) =
let lenght = Array.length image in
let imageYCbCr = Array.create lenght (0.0, 0.0, 0.0) in
for index = 0 to lenght - 1 do
imageYCbCr.[index] <- RGB_to_YCbCr_v (image.[index])
done
imageYCbCr
大會之後,我們可以看到,進入功能不只是有奇怪的意見命名空間,以及如何使用它們並不清楚。查看Assembly中我們可以使用Reflector的函數的位置。 爲了描述名稱空間和類,您需要在#light後立即添加以下行: module FSharp.Sample.MyFunctions 即,所有下面寫的函數都將包含類MyFunctions fsharp.Core命名空間。 重新項目後,我們將看到在大會有一個清晰的fsharp.Core命名空間示例具有類MyFunctions靜態方法,我們已經在上面描述。 在我們的控制檯應用程序中閱讀更多內容,我們將參考設置爲Assembly,fsharp.core Sample是我的Assembly的名稱,以F#和fsharp.core - 爲了使用F#type Triple的類型(類)。並寫下如下代碼:
using System;
using FSharp.Sample;
namespace CSharp.Sample.Console
{
class Program
{
static void Main()
{
double[][] image = new double[1000][];
Random rand = new Random();
for (int i = 0; i < 1000; i ++)
{
image[i] = new double[3];
image[i][0] = rand.Next();
image[i][1] = rand.Next();
image[i][2] = rand.Next();
}
foreach (var doubles in MyFunctions.Process(image))
{
System.Console.WriteLine(doubles);
}
}
}
}
最初我們指定使用fsharp.Core命名空間。在代碼中,我們生成一組數據並將其傳遞給函數MyFunction。處理,將其轉換爲選定的算法。我們返回的數據類型爲「Microsoft fsharp.core .. Tuple'3」。
我不確定是否有更好的方法,但您可以簡單地將F#項目添加到您的解決方案(作爲DLL)並將其引用到您的C#項目中。那麼你應該可以從C#調用F#方法。 – Luaan