一周学会C#(函数二)

一周学会 C# (函数二)

C# 才鸟(QQ:249178521)

4. 引用型参数

· ** 引用型参数是实参的一个别名 ** ** **

w ** 没有发生复制 ** ** **

w ** 实参必须预先被赋值 ** ** **

w ** 实参必须是一个变量类型 ** ** **

w ** 实参和函数参数都要有 ** ** ref **

** sealed class ** ** ParameterPassing **

** { ** ** **

** static void ** ** Method( ** ** ref ** ** ** ** int ** ** parameter) **

** { **

** parameter = 42; **

** } **

** static void ** ** Main ** ** () **

** { **

** ** ** int ** ** arg = 0; **

** ** ** Console.Write(arg); // ** ** 结果为 ** ** 0 **

** Method( ** ** ref ** ** arg); **

** Console.Write(arg); // ** ** 结果为 ** ** 42 **

** } **

** } **

函数参数有 ref 修饰符时,被称为 引用型参数。引用型参数不产生新的存储区间。实际上,引用型参数是函数调用时所传递的实参所代表的变量的别名。结果是引用型参数只是实参所代表的变量的另一个名字。

ref 修饰符必须同时出现在函数声明语句和函数调用语句中。

只有被预先赋值的实参才能被传递给引用型参数,例如:

int arg; // arg 没有被赋初值

Method(ref arg);// 错误,实参必须预先赋初值

传递给 引用型参数的实参必须是变量类型,而不能是纯粹的值或常量。

Method(ref 42); // 错误,引用型参数的实参不能是纯粹的值

const int arg = 42;

Method(ref arg); // 错误,引用型参数的实参不能是常量

5.out 型参数

· ** out ** ** 型参数是实参的一个别名 ** ** **

w ** 没有发生复制 ** ** **

w ** 实参不必预先赋值 ** ** **

w ** 实参必须是变量类型 ** ** **

w ** 函数参数必须被预先赋值才能使用 ** ** **

w ** 实参和函数参数都要有 ** ** out **

** sealed class ** ** ParameterPassing **

** { ** ** **

** static void ** ** Method( ** ** out ** ** ** ** int ** ** parameter) **

** { **

** parameter = 42; **

** } **

** static void ** ** Main ** ** () **

** { **

** ** ** int ** ** arg; **

** //Console.Write(arg); **

** Method( ** ** out ** ** arg); **

** Console.Write(arg); // ** ** 结果为 ** ** 42 **

** } **

** } **

函数参数有 out 修饰符时,被称为 out 型参数。 out 型参数不产生新的存储区间。实际上, out 型参数是函数调用时所传递的实参所代表的变量的别名。结果是 out 型参数只是实参所代表的变量的另一个名字。

out 修饰符必须同时出现在函数声明语句和函数调用语句中。

没有被预先赋值的实参能够被传递给引用型参数,例如:

int arg; // arg 没有被赋初值

Method(out arg);// 正确,实参可以不赋初值

传递给 out 型参数的实参必须是变量类型,而不能是纯粹的值或常量。

Method(out 42); // 错误, out 型参数的实参不能是纯粹的值

const int arg = 42;

Method(out arg); // 错误, out 型参数的实参不能是常量

6.in 型参数 ?

· **_ readonly _ ** ** , const ** ** 和 ** ** _ in _ , ** ** 都是 ** ** C# ** ** 关键字 ** ** **

w ** 它们不能被用于函数参数 ** ** **

w **_ ref/out _ ** ** ** ** 型参数总是被赋于写的权力 ** ** ** ** **

7. 函数重载

· ** 一个类中的函数可以有同一个名字,称为重载 ** ** **

w ** 函数名和参数称为标识 ** ** **

w ** 标识必须唯一 ** ** **

w ** 返回值类型不是标识 ** ** **

** namespace ** ** System **

** { ** ** **

** public sealed class ** ** Console **

** { ** ** **

** public static void ** ** WriteLine() **

** { ... } **

** public static void ** ** WriteLine( ** ** int ** ** value) **

** { ... } **

** public static void ** ** WriteLine( ** ** double ** ** value) **

** { ... } **

** ... **

** public static void ** ** WriteLine( ** ** object ** ** value) **

** { ... } **

** ... **

** } **

** } **

和 C++ 与 Java 一样, C# 允许一个类声明两个以上的同名函数,只要参数的类型或个数不同。这就是重载。但是,一个类不能包含标识为相同的实例函数和静态函数,例如:

sealed class Illegal

{

void Overload() { ... }

static void Overload() { ... }// 错误

}

和 C++ 与 Java 一样,返回值的类型不是标识的一部分,不能被用作重载的标准,例如:

sealed class AlsoIllegal<o:p

Published At
Categories with Web编程
Tagged with
comments powered by Disqus