一周学会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
{
int Random() { ... }
double Random() { ... }//错误
}