2012-05-20 28 views
2

我想在Unity中做一些游戏编程,并且由于这个事实我不得不选择C#或Javascript或(Boo)。我选择C#是因为至少有体面的IDE,实际上它比Javascript和面向对象的要快。无论如何,我宣布委托:为什么我必须给它一个名字?

private delegate Object Instantiate_(Object ,Vector3 ,Quaternion); 

,我收到编译器错误,告诉我,我应该说出那些PARAMS。任何合乎逻辑的原因?我没有在任何地方使用它们,也没有提到它们,那么命名它们有什么意义呢?

+0

如果你不使用它们,为什么要把它们放在第一位呢?为什么不只是'私人委托对象实例化_()'? – jayjyli

+0

,因为这是定义委托的语法 –

+0

我不知道您是否是C#的新手,或者您有使用委托的特例,但是当我看到一个委托时,我通常会认为作者的真正含义是使用'event'。 –

回答

2

参数名称是必需的,这样你可以使用显式指定参数名称调用语法:

public delegate object MakePersonDelegate(string firstName, string lastName, DateTime dateOfBirth); 

MakePersonDelegate myDelegate = ...; 
myDelegate(lastName: "Smith", firstName: "John", dateOfBirth: new DateTime(1985, 1, 1)); 

注意:此代码是如何切换第一和周围的姓氏;代表得到他们在正确的顺序,但:"John"将被传递给委托的第一个正式参数,并且"Smith"将传递给第二个参数。

+0

似乎有点傻,如果有什么我应该得到警告没有错误。为什么错误?愚蠢的规则。为什么我想在调用过程中交换参数?为了让我的代码更容易混淆下一个开发者?我不是说听起来很负面(我有C++背景),但是那几个星期我熟悉C#并且比较C++我发现所有关于C#的可读性和可维护性都只是一个旧的故事。 – smallB

+3

@smallB在分配毛毯谴责之前可能学习C#的基础知识? – McGarnagle

+0

@smallB由于C#支持这种语法,它需要在声明或调用命名参数时出错。您可能希望在调用期间*名称*参数,因为它们中的几个可能具有相同的类型。你怎么知道这两个字符串中哪一个是第一个名字,哪一个是最后一个?具有五个相同类型的参数的函数如何?它非常快速地混淆,语言为您提供了缓解它的手段;交换能力成为额外的奖励 - 你不必*做到这一点,但很高兴知道你可以做到。 – dasblinkenlight

相关问题