游泳

总体了解C#(14.参数修饰符)

2019-09-12 18:09:01来源:励志吧0次阅读

14.参数修饰符

(1)ref参数修饰符

C#(和Java相比)可以让你按引用传递参数。描述这一点的最明显的例子是通用交换方法。不象C++,不但是声明时,调用时也要加上ref指示符:【译注:不要误会这句话,C++中当然是没有ref关键字】

public class Test

{

public static void Main ()

{

int a = 1;

int b = 2;

swap (ref a, ref b);

}

public static void swap (ref int a, ref int b)

{

int temp = a;

a = b;

b = temp;

}

}

(2)out参数修饰符

out关键字是对ref参数修饰符的自然补充。Ref修饰符要求参数在传入方法之前必须被赋值。而out修饰符则明确当方法返回时需显式给参数赋值,。

(3)params参数修饰符

params修饰符可被加在方法的最后的参数上,方法将接受任意数量的指定类型的参数【译注:在一个方法声明中,只允许一个params性质的参数】。例如:

public class Test

{

public static void Main ()

{

Console.WriteLine (add (1, 2, 3, 4).ToString());

}

public static int add (params int[] array)

{

int sum = 0;

foreach (int i in array)

sum += i;

return sum;

}

}

【作者注:学习Java时一个非常令人诧异的事是发现Java不能按引用传递参数,尽管不久以后,你很少会再想要这个功能,并且写代码时也不需要它了。当我第一次阅读C#规范的时候,我常想,“他们干吗把加上这个功能,没有它我也能写代码”。经过反省以后,我意识到这其实并不是说明某些功能是否有用的问题,更多是说明了没有它你就另需别的条件才能实现的问题。

[下一页]

当考虑到C++是怎么做的时候,Java是干了件好事,它简化了参数如何传递的问题。在C++中,方法【译注:C++中没有方法一说,应该称为“函数”或“成员函数”】的参数和方法调用通过传值、引用、指针【译注:例如int、int*、int&】,使得代码变得不必要的复杂。C#显式传递引用,不管是方法声明时还是调用时。它大大地减少了混乱【译注:这句话应该这么理解:由于C++的语法问题,有时你并不知道你是在使用一个对象还是一个对象引用,本节后有示例】,并达到了和Java同样的目标,但是C#的方式更有表达力。显然这是C#的主旨—它不把程序员圈在一个圈里,使他们必须绕一个大弯子才能做成某件事。还记得Java吗?Java指南里,建议如何解决传引用的问题,你应该传递一个1个元素的数组去保存你的值,或另做一个类以保存这个值。

【译注:

#include "stdafx.h"

class ParentCls

{

public:

virtual void f(){printf("ParentCls\t");}

};

class ChildCls : public ParentCls

{

public:

virtual void f(){printf("ChildCls\t");}

};

void Test1(ParentCls pc) {pc.f();}

void Test2(ParentCls& pc) {pc.f();}

int main(int argc, char* argv[])

{

ChildCls cc;

Test1(cc);//输出ParentCls

Test2(cc);//输出ChildCls

file://只看调用处,是不知道你使用的引用还是对象的,但运行结果迥异!

return 0;

}

尿路结石排石方法
宝宝积食该吃什么药
幼儿大便干
两个月宝宝咳嗽
分享到: