Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 为什么我要给它起个名字?_C# 4.0_Delegates - Fatal编程技术网

C# 4.0 为什么我要给它起个名字?

C# 4.0 为什么我要给它起个名字?,c#-4.0,delegates,C# 4.0,Delegates,我试图在Unity中进行一些游戏编程,由于这个事实,我不得不选择C#或Javascript或(Boo)。我选择C#是因为它至少有一个像样的IDE,事实上它比Javascript和面向对象稍快一点。无论如何,我声明委托: private delegate Object Instantiate_(Object ,Vector3 ,Quaternion ); 我得到了一个编译器错误,告诉我应该命名这些参数。有什么合乎逻辑的原因吗?我没有在任何地方使用它们,也没有引用它们,那么命名它们有什么意义呢

我试图在Unity中进行一些游戏编程,由于这个事实,我不得不选择C#或Javascript或(Boo)。我选择C#是因为它至少有一个像样的IDE,事实上它比Javascript和面向对象稍快一点。无论如何,我声明委托:

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

我得到了一个编译器错误,告诉我应该命名这些参数。有什么合乎逻辑的原因吗?我没有在任何地方使用它们,也没有引用它们,那么命名它们有什么意义呢?

参数名称是必需的,这样您就可以使用调用语法明确指定参数名称:

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”
将传递给第二个参数。

如果您没有使用它们,为什么还要将它们放在第一位?为什么不让
私有委托对象实例化?
?因为这是定义委托的语法我不知道你是否是C语言的新手,或者你是否有使用委托的特殊情况,但当我看到委托时,我通常认为作者真正的意思是使用
事件
。这似乎有点愚蠢,如果有什么我应该得到警告而不是错误。为什么会出错?愚蠢的规则。为什么我要在调用期间交换参数?让我的代码对下一个开发人员更加混乱?我不是有意否定(我有C++背景),但是那几周我熟悉C语言,和C++相比,我看到所有关于C语言的知识都更可读,“可维护”只是一个古老的妻子故事。@smallB可能在进行全面谴责之前学习C#的基础知识?@smallB因为C#支持这种语法,所以在声明或使用命名参数调用时,它需要是一个错误。您可能希望在调用期间命名参数,因为其中几个参数可能具有相同的类型。您如何知道这两个字符串中的哪一个是名字,哪一个是姓氏?具有五个相同类型参数的函数如何?它很快就会变得令人困惑,语言为你提供了缓解它的方法;交换的能力是一个额外的好处-您不必这样做,但知道您可以这样做很高兴。@dasblinkenlight:“您如何知道这两个字符串中的哪一个是名字,哪一个是最后一个?”-我按正确的(声明的)顺序传递它们。@smallB尽管两周的时间肯定足以正确地掌握基本知识,当然,这段时间太短了,无法对语言有一个明显的理解。虽然Java和C在一开始几乎没有什么不同,但它们在C#2.0上的差异足以使差异变得明显,并且随着C#3.5对函数式编程风格的支持,这两种语言变得相当不同。至于“简化C++”,C++中有一些东西是不能在C++中实现的(阅读反射,了解我的意思)。