C#参数传递问题

时间:2022-08-29 20:10:13

c#传递参数问题: 1.一般的参数传递,不修改实参数   void Mymethod (Student studentobj,int aNumber)      {        aNumber +=5;        studentobj.name="jon";       }      int myint=8;   Student studentA=new Student();   studentA.name="Mike";   Mymethod(studentA,myint);

  通过这个示例,实际Mymethod之后,myint仍等于8,但是studentA的name却变为了jon,为什么呢?实际改传递参数,为什么myint仍然是8呢,因为方法的作用域的问题,以及方法中只是将实参传递出来的值进行了操作,但是没改变实参的值,该种参数传递只是把实参的值传入方法,但是studentA的name改变了,为什么呢?因为它是一个对象类型,实际是引用类型,它存的值是该引用类型的首地址,所以实参将其首地址传入方法,所以方法通过改变其地址的内容改变了引用类型的值;     综上所述,该种方法并不改变实参数的值,除非该实参是引用类型;   2.通过ref关键字实现参数传递达到通过方法改变实参   void AddPoint(ref int point)   {     point+=5;    }    Student studentA=new Student();    studentA.point=80;    AddPoint(studentA.point);   现在通过AddPoint方法,该学生的分数加了5;通过ref关键字可实现一般参数传递无法实现的对实参的改变,这对编程来说是很有用的;   综上所述,我们科通过ref关键字实现方法对实参的值的改变,但是ref 修饰的参数必须赋有初值,未赋值将会报错;

3. 通过out关键字修饰形参达到通过方法改变实参    void AddPoint(out int point)   {     point+=5;    }    Student studentA=new Student();    AddPoint(studentA.point);    相信大家可以看出其与上一种参数传递方法的区别,out关键字可以实现和ref关键字类似的功能,但是它修饰的实参可以不用赋初值,这也很有用,类似这个,算学生分数时,他达到什么要求就加分,没就不加,从0开始,这样就可以算出其分数了;     综上所述,其与ref类似,只是实参可以未赋初值;

  综上所述,参数传递需要根据你的需要去选择相应的方法,其次是了解ref,out关键字的使用与区别;