📄 8-1.cs
字号:
//程序8-1
using System;
namespace ParametersPassing
{
public class ParamsPassing
{
char [] ChArr; // 默认访问修饰符是private
//构造函数
public ParamsPassing ()
{}
public ParamsPassing (char[] ch) // 值传递的构造函数
{ ChArr=ch; }
public ParamsPassing(ref char[] ch) // 引用传递的构造函数
{ ChArr = ch; }
//测试用属性
public char MyChArr
{
get{ return ChArr[1];}
set{ ChArr[1] = value;}
}
//测试用方法
//值类型参数,“值传递”
//实参将值传递给形参,系统为形参开设存储空间,以接受传递的值。
//改变形参的值不会影响实参。
public int Sum(int x, int y)
{
Console.WriteLine("Before Calculating, x={0}, y={1}",x,y);
x ++;
y ++;
Console.WriteLine("After Calculating, x={0}, y={1}",x,y);
return x+y;
}
//值类型参数,“引用传递”
//实参将自己的引用,也就是自己数据在存储器中的地址复制给形参。
//引用参数既是方法的输入,也是方法的输出。
//改变形参的值将会影响实参。
//使用ref参数时,实参传递给形参之前应该已经被具体地赋值或者初始化
public void Swap( ref int x,ref int y)
{
Console.WriteLine("Before Swapping x={0}, y={1}",x,y);
int temp;
temp=x;
x=y;
y=temp;
Console.WriteLine("After Swapping x={0}, y={1}",x,y);
}
//引用类型参数,“值传递”和“引用传递”
//引用类型参数不使用ref,也是引用传递
//忠告:要想传出实参的值,就用ref。
public void ArrParams(int[] ValArr, ref int [] RefArr)
{
Console.WriteLine("In the method:");
Console.Write("Before calculating,the ValArr's elements are:");
foreach(int elem in ValArr)Console.Write(elem+", ");Console.WriteLine();
ValArr[0]=123;
ValArr=new int[]{-1,-2,-3}; //创建一个与形参同名的数组,但是不是实参传递的数组
Console.Write("After calculating the ValArr's elements are:");
foreach(int elem in ValArr)Console.Write(elem+", ");Console.WriteLine();
Console.Write("Before calculating,the RefArr's elements are:");
foreach(int elem in RefArr)Console.Write(elem+", ");Console.WriteLine();
RefArr[0]=456;
RefArr=new int[]{-4,-5,-6}; //创建一个与形参同名的数组,与实参的地址相同
Console.Write("After calculating,the RefArr's elements are:");
foreach(int elem in RefArr)Console.Write(elem+", ");Console.WriteLine();
Console.WriteLine("Leave the method");
}
}
public class Test
{
public static void Main ()
{
ParamsPassing AnExample =new ParamsPassing();
//测试值类型参数的值传递
Console.WriteLine("======值类型参数传递====");
int value1=5;
int value2=10;
Console.WriteLine("调用值传递方法前value1 = {0}, value2 = {1}", value1, value2);
int theSum=AnExample.Sum(value1, value2);
Console.WriteLine("Sum= "+theSum);
Console.WriteLine("调用值传递方法后value1 = {0}, value2 = {1}", value1, value2);
//测试引用传递
Console.WriteLine("调用引用传递方法前value1 = {0}, value2 = {1}", value1, value2);
AnExample.Swap(ref value1,ref value2); //调用前必须对value1和value2赋值,这是与out不同点。
Console.WriteLine("调用引用传递方法后value1 = {0}, value2 = {1}", value1, value2);
Console.WriteLine("======引用类型参数传递====");
//测试引用类型参数的“值传递”和引用传递
int[] FirArr = {101,102,103};
int[] SecArr={201,202,203};
Console.Write("测试前,数组FirArr的元素为:");
foreach(int elem in FirArr)Console.Write(elem+", ");
Console.WriteLine();
Console.Write("测试前,数组SecArr(ref传递)的元素为:");
foreach(int elem in SecArr)Console.Write(elem+", ");
Console.WriteLine();
AnExample.ArrParams(FirArr,ref SecArr);
Console.Write("测试后,数组FirArr的元素为:");
foreach(int elem in FirArr)Console.Write(elem+", ");
Console.WriteLine();
Console.Write("测试后,数组SecArr的元素为:");
foreach(int elem in SecArr)Console.Write(elem+", ");
Console.WriteLine();
Console.WriteLine("======值传递的构造函数====");
char[]cc={'a','b','c','d'};
ParamsPassing AnotherExample=new ParamsPassing(cc);
Console.WriteLine("测试前,ChArr[1]是:"+AnotherExample.MyChArr);
cc[1]='f';
Console.WriteLine("实参cc[1]修改为f后,ChArr[1]为:"+AnotherExample.MyChArr);
AnotherExample.MyChArr='w';
Console.WriteLine("ChArr[1]修改为w后,cc[1]的值为:"+cc[1]);
Console.WriteLine("======引用传递的构造函数====");
char[]dd = {'a','b','c','d'};
ParamsPassing The3rdExample=new ParamsPassing(ref dd);
Console.WriteLine("测试前,ChArr[1]是:"+The3rdExample.MyChArr);
dd[1]='m';
Console.WriteLine("实参dd[1]修改为m后,ChArr[1]为:"+The3rdExample.MyChArr);
The3rdExample.MyChArr='s';
Console.WriteLine("ChArr[1]修改为s后,实参dd[1]的值为:"+dd[1]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -