c# - 委托(delegate)的复杂使用

标签 c#

这里是 C# 新手。

在我的一个类(准确地说是实体类)中,我有一个接受实体和另一个相关类的委托(delegate):

public delegate void FiringFunc(Entity e, BulletFactory fact)

实体类中的循环每帧调用此函数(如果已定义):

FiringFunc firingFunc = null; //defined later
if(firingFunc)
    firingFunc(this, someBulletFactory);    

正如人们可能会说的那样,这是一个充当子弹发射功能的委托(delegate)(您可以编写诸如子弹计时器、发射角度等之类的代码)。然而,我想到了一个想法:如果我希望子弹有轻微差异,但仍然保持不变(比如稍微慢一点,颜色稍微不同,方向不同, ETC)。我必须创建另一个函数来充当委托(delegate) - 这对我来说似乎是错误的。

以下是创建和设置委托(delegate)的示例:

Entity e = new Entity( ... )
e.firingFunc = FiringFunctions.SomeFiringFunctionName;

有什么办法可以添加参数吗?如果我能做类似以下的事情那就太好了:

e.firingFunc = FiringFunctions.SomeFiringFunctionName(someChange1, someChange2);

最佳答案

尝试

e.firingFunc = 
    (Entity e, BulletFactory fact) => 
        FiringFunctions.SomeFiringFunctionName(e, fact, "foo", 5);

这将创建一个新的匿名函数(lambda),它使用包含的参数调用 FiringFunctions.SomeFiringFunctionName

这假设 FiringFunctions.SomeFiringFunctionName 定义为:

public void SomeFiringFunctionName(Entity e, BulletFactory fact, String someString, Int32 someInt) { 
  //...  do whatever here
}

关于c# - 委托(delegate)的复杂使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710626/

相关文章:

c# - C++ 运算符重载

c# - 无法实习可为空的日期时间

c# - 声明一个长常量字节数组

c# - 组合框 if 语句

c# - Azure 服务总线托管 REST 服务

c# - 无法在 VS Code 终端中创建 C# 控制台应用程序

c# - 一次查询多个列表

C# BackgroundWorker 在重启时占用内存

c# - .net core with Docker Https 在不同端口映射时错误重定向

c# - LINQ - 按值区分?