c#相当于c++;回拨
我想创建一个c#回调代码,用户在其中发送自己要执行的函数。 我是新来c#的,所以我找不到合适的方法来做这件事。 等效C++代码为c#相当于c++;回拨,c#,c++14,C#,C++14,我想创建一个c#回调代码,用户在其中发送自己要执行的函数。 我是新来c#的,所以我找不到合适的方法来做这件事。 等效C++代码为 class Test { bool (*signin)(int); bool (*signout)(); public: void Register(bool(*usignin)(int), bool(*usignout)()) { signin = usignin; signout = usignout
class Test
{
bool (*signin)(int);
bool (*signout)();
public:
void Register(bool(*usignin)(int), bool(*usignout)())
{
signin = usignin;
signout = usignout;
}
void display(int a,int b)
{
signin(a + b);
signout();
}
};
主要功能:
bool signin(int i)
{
cout << i << endl;
return true;
}
bool signout()
{
cout << "Signed out" << endl;
return true;
}
int main()
{
Test *obj = new Test();
obj->Register(signin, signout);
obj->display(4,6);
}
bool符号(inti)
{
cout在现代C#中,一种常见的方法是将参数定义为Action
(无返回类型,void
)或Func
(带有返回类型),并在调用时传递lambdas或普通函数
因此,在您的案例中,相应的注册签名似乎是:
void Register(Func<int, bool> signin, Func<bool> signout)
注意:int
在这里的lambda中应该是可选的。取决于您是想要完全相同的实现还是想要一种通知类型的机制
我建议在每种语言中寻找最佳解决方案。例如,在C#中,您可以使用EventHandler、委托或实现例如observer模式
事件处理程序:
观测者模式:那么你能告诉我如何在显示函数中使用注册函数吗?我如何在显示函数中使用注册函数吗?你可以使用相同的模式:在类中定义字段,使用相同类型的构造函数参数。在构造函数中分配字段(当然,如果愿意的话,还可以对它们进行null检查)然后调用它们就像你调用函数一样,就像C++版本中所做的一样。如果你为字段保存相同的名字,代码< >代码>代码>函数将完全相同。学习。关心下投票吗?(至少提出一个你为什么不同意的评论)
Register((int id) => { Console.WriteLine($"logged in user with id {id}!"; return true; }, () => { Console.WriteLine("Sign out callback called."); return true; });