在C#中是否可以将类函数(非静态)作为参数传递给函数?
由于某种原因,我在函数下载中遇到编译错误,因为我传递了一个'class / instance'函数作为参数。
例如:
public class MyPlane {
Texture texture;
virtual public void OnDownloadPlaneCallBack(WWW www) {
// perform custom actions when/if file downloads correctly
texture = www.texture;
}
virtual public void download() {
Downloader.download("www.blah.com", OnDownloadPlaneCallBack); // this gives a compile error?
}
}
public class Downloader {
public static IEnumerator download(string url, Delegate callback) {
WWW www = new WWW(url);
while(!www.isDone)
yield return www;
if (www.isDone) {
callback.DynamicInvoke(www);
}
}
}
答案 0 :(得分:2)
当然,您可以从实例方法构造委托:这是一个非常强大的功能。您看到的问题与创建委托的特定语法有关 - 使用方法组。
您收到编译错误,因为方法组(这是从“裸”方法名称构造委托的正式名称)不能作为“无类型”Delegate
的参数传递。
如果您更改download
方法的签名以接受Action<WWW>
,您的代码将正确编译。您也可以显式地转换方法组,如下所示:
Downloader.download("www.blah.com", (Action<WWW>)OnDownloadPlaneCallBack);
答案 1 :(得分:1)
是
public string CanReceiveFunction(Func<int, string> func) {
if (func != null) return func(5);
}
public string CanConvertIntToString(int a) {
return "here is the result: " + a;
}
public void Main() {
var result = CanReceiveFunction(CanConvertIntToString);
Console.WriteLine(result);
}