一周学会C#(函数三)

王朝c#·作者佚名  2006-01-08
宽屏版  字体: |||超大  

一周学会C#(函数三)

C#才鸟(QQ:249178521)

8.ref/out重载

· ref / out 在大部分情况下是标识的一部分!

w 你可以重载一个ref型参数和一个普通参数

w 你可以重载一个out型参数和一个普通参数

w 你不可以重载一个ref型参数和一个out型参数

sealed class Overloading

{

void Allowed( int parameter)

{ ... }

void Allowed(ref int parameter)

{ ... }

//正确,重载一个ref型参数和一个普通参数

void AlsoAllowed( int parameter)

{ ... }

void AlsoAllowed(out int parameter)

{ ... }

//正确,重载一个out型参数和一个普通参数

void NotAllowed(ref int parameter)

{ ... }

void NotAllowed(out int parameter)

{ ... }

//错误,不能重载一个ref型参数和一个out型参数

}

ref和out修饰符可以是一个函数的标识。但是你不能同时重载ref和out型参数。ref和out修饰符在某种意义上是“安全的“,因为只有ref型实参才能传递给ref型函数参数,只有out型实参才能传递给out型函数参数。但是,当调用函数的时候,你会非常容易忘记ref和out修饰符,所以最好不要重载ref和out型参数。例如:

sealed class Overloading

{

public static void Example(int parameter)

{ ... }

public static void Example(ref int parameter)

{ ... }

static void Main()

{

int argument = 42;

Example(argument);//在这儿非常容易忘记ref修饰符

}

}

9.访问规则

l 函数参数或返回值不能比所属函数的访问级别低

sealed class T { ... } //类的默认访问级别是internal

public sealed class Bad

{

public void Parameter(T t) //错误,函数的访问级别(public)比参数高

{ ... }

public T Return() //错误,函数的访问级别(public)比返回值高

{ ... }

}

public sealed class Good

{

private void Parameter(T t) //正确,函数的访问级别(private)比参数低

{ ... }

private T Return() //正确,函数的访问级别(private)比返回值低

{ ... }

}

10.找错误

sealed class Buggy

{

void Defaulted(double d = 0.0) 1

{ ...

}

void ReadOnly(const ref Wibble w) 2

{ ...

}

ref int ReturnType() 3

{ ...

}

ref int fieldModifier; 4

}

第1个函数的错误是:C#中函数不能拥有缺省参数。

第2个函数的错误是:ref型参数不能用const修饰,因为ref型参数是可能变化的。

第3,4个函数的错误是:ref和out型参数只能用于函数参数和实参。

C#中可以通过函数重载的办法实现缺省参数的功能,以下是实现的方法:

sealed class Overload

{

void DefaultArgument() { DefaultArgument(0.0); }

void DefaultArgument(double d) { ... }

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有