[英]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.