c#笔记之方法的形参列表以及方法重载
学习内容:
方法的形参各种形式,形参就是方法括号里的如public void Funt(int x)里的x;
一、传值参数
本质就是创建一个副本来操作副本
1.1值类型
给方法传值的参数如下面例子里的x;在方法内部对传进来的参数进行操作不会影响,操作完之后y依旧是40,因为在方法里操作的是传进来变量的副本
public void TestFunt(int x)
{
x+=1;
}int y=4;
TestFunt(y);
1.2引用类型(不推荐使用这种情况)
引用类型因为引用类型里存的不是直接的值而是地址所以传入方法之后方法里的地址指向的还是同一个对象,所以这时候修改会改变传入的对象里的值;下面的例子在执行方法test2之后stu1的name是11;因为输入的是副本所以是两个地址;但是地址里的值都是同一个实例在堆上的地址所以操作会改变实例stu1的name属性;
class Student
{
public string name{get;set;}
}public void TestFunt(Student stu){
stu.name=“11”;
}public void test2()
{
Student stu1 = new Student();
stu1.name="22";
TestFunt(stu1);}
二、引用参数(ref)
引用参数和上面的传值参数的区别就是不创建副本;
因为不创建副本所以在方法里修改会直接改变方法外的值,如下面例子里的x,在方法test后变成3;声明方法时和使用方法时都要加上ref关键字
public void Funt()
{
int x=2;
test(ref x);
}public void test(ref int y)
{
y+=1;
}
三、输出参数(out)
和引用参数一样都是不创建副本;
如下面例子里的x,在方法test后变成3;声明方法时和使用方法时都要加上out关键字;
public void Funt()
{
int x=2;
test(out x);
}public void test(out int y)
{
y=3;
}
四、out和ref的区别
4.1使用场景不同
ref一般用于修改某个值的时候会用;out则是要输出某个值的时候;
因为ref是修改是在值上修改所以在方法外要明确值不然修改什么;在方法结束的时候也可以不修改赋值;out是输出原本的值无所谓,所以在方法外可以不用明确值但是结束的时候一定要赋值;
public void RefFunt(ref int x)
{//可以不对x操作
}public void OutFunt(out int y)
{int y=4;//明确修改
}public void Test()
{
int iTest = 4;//明确值
RefFunt(ref iTest);int iTest1;//可以不用明确值
OutFunt(out iTest1);}
五、数组参数(params)
有一个方法要一个int数组参数
public void Funt(int[] x)
{}public void test()
{int[] yy = new int[3] { 1,2,3};
Funt(yy);
}
可以使用params
public void Funt(params int[] x)
{}public void test()
{
//可以使用旧形式int[] yy = new int[3] { 1,2,3};
Funt(yy);//还可以用新方法
Funt(1,2,3);
}
形参列表不止一个的时候,数组参数必须要在形参列表的最后一个并且只能有一个,下面的4就是形参c,后面多出来的1,2,3系统默认属于数组int[]x。
public void Funt(string te,int c,params int[] x)
{}public void test()
{
Funt(“yy”,4,1,2,3);
}
六、具名参数
具名参数其实不是一种形参参数而是一种使用方法;可以不用在意参数具体位置,
public void Funt(string te,int c)
{}public void test()
{
Funt(c:5,te:“yy”);//可以吧形参te和c的位置反过来因为前面有参数的名字
}
七、方法重载(this)
方法重载是对类添加一个方法适用与类的代码不在自己手里但是要添加一个方法的情况;
exp:比如有一个Student类要添加一个方法
- 先创建一个静态类(约定俗成Extensions结尾)
public class Student{public string strName;
}public static class TestExtensions{public static void testexFunt(this Student stu, int a){Console.WriteLine(stu.strName);Console.WriteLine(a.ToString());}}
2.创建一个静态方法第一个形参要添加this,this后面加要添加这个方法的类如例子里是Studen这个类;注意this形参只能是第一个并且不能用ref或者out;其他的就和正常方法的形参一样,
学习时间:
25.07.17