这里是 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/