C#类和对象(3)

四、C#中的方法

5、方法的参数拓展

1)实参和形参

方法中的参数分为实际参数和形式参数,实际参数被称为实参,是在调用方法时传递的参

数;形式参数被称为形参,是在方法定义中所写的参数。

例如以下代码:

其中对于Add方法来说,

变量num1num2是实际参数,称为实参。

ab是形式参数,称为形参。

 static void Mian(string[] args)

 {

     //创建一个对象

     Program program = new Program();

     

     //创建两个变量

     int num1 = 5;

     int num2 = 6;

     

     //调用Add方法

     program.Add(num1,num2);

 }

 ​

 /// <summary>

 /// 两个整数相加

 /// </summary>

 /// <param name="a">第一个整数</param>

 /// <param name="b">第二个整数</param>

 /// <returns></returns>

 public int Add(int a, int b)

 {

     return a + b;

 }

2)值传递和引用传递

C#中参数传递的方式有两种:值传递和引用传递

值传递:值传递是指在调用方法时将实际参数复制一份传递到方法中,这样在方法中如果对参数进行

修改,将不会影响到实际参数。

对于值类型的数据,如果没有特殊说明,那么在方法调用时按照值传递的方式进行参数的传

递。

引用传递:

引用传递是指在调用方法时实际参数和形式参数都指向同一个内存,这样在方法中如果对参

数进行修改,将会影响到实际参数。

前面我们讲到C#数据类型分为值类型和引用类型。

那么在方法调用时,值类型一般都是以值传递的方式,引用类型都是以引用传递的方式。

例如以下代码:

 //IntValue.cs 源文件

 ​

 /// <summary>

 /// 定义一个只包含整数的类型

 /// </summary>

 class IntValue

 {

  public int Value { get; set; }

 }
 //Program.cs 源文件

 static void Main(string[] args)

 {

     int num = 5;

     

     IntValue intValue = new IntValue();

     intValue.Value = 5;

     

     Console.WriteLine("num:{0}", num);

     //值类型

     ChangeValue(num);

     Console.WriteLine("num:{0}", num);

     

 ​

     Console.WriteLine("IntValue:{0}", intValue.Value);

     //引用数据类型

     ChangeValue(intValue);

     Console.WriteLine("IntValue:{0}", intValue.Value);

 }

 ​

 static void ChangeValue(int value)

 {

     value = 20;

 }

 ​

 static void ChangeValue(IntValue intValue)

 {

     intValue.Value = 20;

 }

3ref关键字和out关键字

ref:当方法定义的时候在形参前面添加ref关键字表明是以引用的方式进行传参。(参数传递

时也需要添加ref关键字)

使用场景:需要以引用的方式传递值类型参数。

修改上一个案例的ChangeValue方法:

运行后可以看到,对于值类型,在参数列表添加ref关键字之后,达到了引用传递参数的效

果,在方法内部对形参的变动可以影响到实参。

 //IntValue.cs 源文件

 ​

 /// <summary>

 /// 定义一个只包含整数的类型 

 /// </summary> 

 class IntValue

 {

     public int Value { get; set; }

 }

 ​

 //Program.cs 源文件

 static void Main(string[] args)

 { 

     int num = 5;

     IntValue intValue = new IntValue();

     

     intValue.Value = 5;

     

     Console.WriteLine("num:{0}", num);

     //值类型

     ChangeValue(ref num);

     Console.WriteLine("num:{0}", num);

     

     

     Console.WriteLine("IntValue:{0}", intValue.Value);

     //引用数据类型 

     ChangeValue(intValue); 

     Console.WriteLine("IntValue:{0}", intValue.Value);

 }

 ​

 static void ChangeValue(ref int value)

 {

     value = 20; 

 }

 ​

 static void ChangeValue(IntValue intValue)

 { 

     intValue.Value = 20; 

 }

拓展:

引用类型使用ref传参和不适用ref传参需要注意的地方:

a. 当引用类型不使用ref传参,在方法内部重新new一个对象后再进行操作,则该操作对实

参没有影响。

b. 当引用类型使用ref传参,在方法内部重新new一个对象后再进行操作,则相当于将实参

指向一个新的对象。

out:out关键字修饰的参数为输出参数。(参数传递时也需要添加out关键字)

使用场景:需要有多个返回值的情况。

例如以下代码:

 /// <summary>

 /// 这个是主函数,是程序的入口 

 /// </summary>

 /// <param name="args">参数说明</param>

 static void Main(string[] args)

 { 

     int num1 = 5;

     int num2 = 0;

     int result;

     

     //out关键字与实参一同传入 

     bool isSuccessed = Divided(num1, num2,out result);

     

     Console.WriteLine("isSuccessed:{0},Result:{1} ", isSuccessed, result);

 } 

 ​

 /// <summary> 

 /// 两个整数相除 

 /// </summary> 

 /// <param name="value1">1</param> 

 /// <param name="value2">2</param> 

 /// <param name="result">结果</param> 

 /// <returns>是否成功</returns> 

 static bool Divided(int value1, int value2,out int result)

 {

     result = 0; 

     

     if (value2 == 0) 

    { 

         return false;

    } 

     

     result = value1 / value2; 

     

     return true; 

 }

6、方法的默认参数

C#中允许给方法设置默认参数,当调用方法时如果没有传递相应的实参,那么系统就是使

用默认参数替代。方法的默认参数只能设置在非默认参数的后面。且默认参数可以多个。

举例如下:

 static void Main(string[] args)
 {
     
int num = 5;
     
     
Console.WriteLine("初始值:{0}", num);
     
     
ChangeValue(ref num);
     
     
Console.WriteLine("修改之后的值(默认修改){0}", num);
     
     
ChangeValue(ref num, 10);
     
     
Console.WriteLine("修改之后的值(加10):{0}", num);
 }
 ​
 
/// <summary>
 /// 带有默认参数的方法
 /// </summary>
 /// <param name="number">要修改的值</param>
 /// <param name="value">修改因子,默认为5</param>
 public static void ChangeValue(ref Int32 number ,int value = 5)
 {
     
number = number + value;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值