簡體   English   中英

C#中是否有函數類型?

[英]Is there a Function type in C#?

我想知道在C#中是否存在類似於AS3的Function類型。 我想做這樣的somnthing(但在C#中):

private function doSomething():void {
    // statements
}

var f:Function = doSomething
f()

是的,它們在.NET中被稱為委托,而不是函數類型。

您可以使用保留關鍵字delegate來定義新的關鍵字delegate ,並且在類庫中預定義了很多。

要定義與您的示例匹配的一個:

public delegate void DoSomethingDelegate(Object param1, Object param2);

然后分配它:

DoSomethingDelegate f = DoSomething;
f(new Object(), new Object());

在基類庫中還定義了兩種通用類型的委托類型,一種用於返回值的方法,另一種用於不返回值的方法,並且它們具有您擁有的參數數量的變體。

對於返回值的方法,這兩個是Func<..>對於沒有返回值的方法,這兩個是Action<..>

在你的情況下,這將工作:

Action<Object, Object> f = DoSomething;
f(new Object(), new Object());

請注意,在最后一種情況下,您不必聲明DoSomethingDelegate

.NET中委托的概念正是您正在尋找的。

鏈接頁面上有一些示例,以及許多教程和深入解釋它們的實現和使用方式。 谷歌走了!

它們(對函數的引用)稱為委托

這是一本很棒的入門書: http//www.akadia.com/services/dotnet_delegates_and_events.html

是的,有一些名為Delegates的類型安全函數指針。 例如 ...

void Main()
{
   object o1 = new object();
   object o2 = new object();

   Action<object, object> act = DoSomething;
   act( o1, o2 );
}

private void DoSomething( object o1, object o2 )
{
  // do that thang
}

Action<T>是內置的委托......

public delegate void Action<T1, T2>(T1 arg1, T2 arg2)

還有一些名為Lambda Expressions的匿名函數。 例如 ...

   List<int> lst = new List<int>() { 1, 2, 3, 4, 5 };
   var res = lst.Where( l => l > 3 );

Where方法的參數是Lambda表達式。 查看Eric White的博客,對這些內容進行了很好的討論: 使用C#3.0中的函數編程技術進行查詢組合

我想你正在尋找一個C#委托類型。

    delegate void DoSomethingDelegate(object obj1, object obj2);

    void DoSomething(object a, object b)
    {
    }

    void RunDoSomething()
    {
        //use your delegate
        DoSomethingDelegate d = new DoSomethingDelegate(DoSomething);
        d(new object(), new object());

        //alernatively, use the built in generic version
        Action<object, object> d2 = new Action<object, object>(DoSomething);
        d2(new object(), new object());

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM