c#中的c++风格回调函数
本文关键字:回调 函数 风格 c++ 中的 | 更新日期: 2023-09-27 18:16:33
我可能太笨了,但我不知道该怎么做....
我有一个库,我试图创建,将有一个虚拟函数,用户可以使用它来创建一个自定义错误处理程序,稍后在代码中调用。我遇到的一个主要问题是,这些错误将存储在一个集合中,以便随机调用。
下面是一些伪代码
class Error
{
string Error {get; set;}
int ErrorCode {get; set;}
public void ErrorFunction(params obj[] arrParams);
}
class program
{
List<Error> errorlist = new List<Error>();
static void Main(string[] args)
{
initList();
errorlist[0].ErrorFunction("Sometext");
}
public void initList()
{
Error err = new Error();
err.ErrorFunction = MyOverloadedError;
errorlist.add(err);
}
public void MyOverloadedError(params obj[] arrObjects)
{
Console.WriteLine(arrObjects);
}
}
我似乎记得能够简单地用a来做到这一点Void *和使用地址赋值要调用的函数的调用。
就像我说的,也许我太笨了,我知道我必须使用委托,但是我不知道如何定义委托,它存在于类的实例中,而不是作为类的静态成员。
重申一下(因为我很累,不确定我是否说得很清楚,或者只是更令人困惑)我想创建一个成员函数,可以有一个自定义函数分配给它。
所以基本上我可以这样做
Error myError = new Error();
myError.ErrorFunction = SomeCustomFunction;
...
myError.ErrorFunction("Some Parameters"); //effectively calling some static function elsewhere
提前感谢!我的脑子好痛....
不确定您想要实现的目标或事件是否更合适,但这是您的伪代码,固定为有效,工作c#代码:
delegate void ErrorDelegate(params object[] arrParams);
class Error
{
string ErrorText { get; set; }
int ErrorCode { get; set; }
public ErrorDelegate ErrorFunction;
}
static class Program
{
static List<Error> errorlist = new List<Error>();
static void initList()
{
Error err = new Error();
err.ErrorFunction = MyOverloadedError;
errorlist.Add(err);
}
static void MyOverloadedError(params object[] arrObjects)
{
Console.WriteLine(arrObjects);
}
static void Main(string[] args)
{
initList();
errorlist[0].ErrorFunction("Sometext");
}
}
在这种情况下应该使用事件:
class Error
{
string Error {get; set;}
int ErrorCode {get; set;}
public event EventHandler<ErrorOccurredEventArgs> ErrorOccurred;
}
public void initList()
{
Error err = new Error();
err.ErrorOccurred += MyOverloadedError;
errorlist.add(err);
}
public void MyOverloadedError(ErrorOccurredEventArgs e)
{
Console.WriteLine(e.Objects);
}