c#软件开发学习笔记
一、方法和定义和调用
方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。
1.定义方法
public static void Test() { }
public 访问修饰符,一般定义公共的
static 静态修饰符 ,不加static为非静态方法
void 返回值类型,void表示无返回值,若有返回值则写返回值类型
Test 方法名字 遵循大驼峰命名规则
(int a,int b,) 参数列表
{} 方法体
2.方法的参数
形参:形式参数,方法在定义的时候,声明在()里面的变量,这个形参的值由实参来决定
实参:实际参数,方法在调用的时候,写在()里面的数据,这个数据就会赋值给对应的形参
//调用有多个参数的方法
Test1(100, "猫猫");
public static void Test1(int count,string name)
{
for (int i = 0; i < count; i++)
{
Console.WriteLine(name);
}
}
在方法定义的时候,可以给形参设置一个默认值,当方法调用的时候,如果没有传递参数,则使用这个参数的默认值(这个参数也叫做 “可选参数”)
// 调用Test4 有默认参数的方法
Test4(10, "喵喵"); //不传默认参数的情况 默认参数值是定义时候写的值
public static void Test4(int count,string name,string str="流浪猫")
{
for (int i = 0; i < count; i++)
{
Console.WriteLine(name+"是"+str);
}
}
3.方法的返回值
return关键字
返回值的作用: 将方法执行的结果返回到调用的地方
在定义方法的时候,指定方法的返回值类型,如果没有返回值 void
//调用带返回值的方法Test2
int s1 = Test2(99, 99);
public static int Test2(int a,int b)
{
int sum = a + b;
return sum; // return返回 跳出方法体, return后面的类型与方法返回值类型保持一致
}
4.方法参数的传递
1.值传递
值传递:方法默认的传递方式,以这种方式调用方法,会在方法执行的时候,声明一个新的变量,接收一个参数,当在方法内部修改的时候,不会影响到外部
- 值传递-------> 传递值类型
把实参值拷贝一份赋值给形参,在方法体里面修改形参的值不会影响调用时候实参的值。
int a1 = 10;
Test1(a1); //把实参传递给形参 把a1赋值a
//传递的参数类型是值类型
public static void Test1(int a) //
{
a = 20;// 修改a的值,不会影响a1的值
}
- 值传递-------> 传递引用类型
把实参的对象地址赋值给形参,形参和实参指向同一个地址,证明是同一个对象
如果在方法中通过对象.属性这种方式进行修改的时候,会影响到实参的对象值,但是本质上影响是对象的属性值,变量里面保存的内存地址不受影响
如果在方法中通过new关键字创键对象,改变整个对象,相当于是开辟了一块新的内存地址,把变量内部保存的旧地址覆盖掉,不会影响到实参的值
People p1 = new People() { Name="张三"};
public static void Test2( People p) // p=p1
{
Console.WriteLine("修改之前"+p.Name);//张三
//修改传递过来实参的俩中方式
//第一种修改:对象.属性这种方式进行修改
p.Name = "李四";
// 第二种修改 修改形参的指向 p与传递过来就不在是同一个对象 如果使用这种改成name=李四 不影响外边的实参的对象的值
p = new People() {Name="李四" };
}
2.引用传递
引用传递:当传递一个值类型或者引用类型的时候,方法内部修改形参,会影响到外部
总结值传递和引用传递的区别:
值传递 在方法内部修改变量,不会影响到外部
引用传递 在方法内部修改变量,会影响到外部
5.ref参数传递(引用传递)
在方法定义的时候,给某个形参前面加上ref关键字,这个参数就将进行引用传递(直接传递变量本身)
int a1 = 10; //ref参数必须赋初始值
Test1(ref a1); //如果参数有ref关键字,需要调用的时候实参前面添加ref关键字
public static void Test1(ref int a)
{
a = 20;//此处修改会影响到外部a1值
}
6. out参数传递
out参数作用:如果想一个方法有个多个返回值,就可以使用out关键字
int a1 = 30;
int b1 = 40; //4 在调用时候可以不用初始化
Test1(out a1, out b1);
Console.WriteLine("a1的值"+a1+";b1的值"+b1);
//使用out输出参数定义方法的时候 先在参数前添加out关键字
public static void Test1(out int a, out int b)
{
a = 90; // 修改a //必须在方法内部初始化赋值
b = 90; // 修改b
a = a + b;// 和180
b = (a-b)*b;//乘积8100
}
总结:ref和out的区别:
1.ref传递参数,必须赋值,out传递参数,可以不用赋值
2.ref传递的参数,在方法中可以不用赋值,out传递的参数,在方法中必须赋值
3.ref传递的参数,可以直接在方法中取值,out传递的参数,必须在赋值之后才能取值
ref的主要作用是为了传入数据,因此传入的时候必须赋值
out的主要作用是为了传出数据,因此在传入的时候,可以不用赋值,但是在方法中必须赋值
7. in关键字
in 关键字修饰之后的参数,方法内部不能对其进行修改(把参数修饰成只读的)
public static void Test1(in int a)
{
//a = 100;// in 使参数变成只读的,不能进行修改
}
8. params关键字
params关键字,参数列表 允许传递不定数量的参数
Test1(1, 2,4,4,4,4,4,4,4,4,44);//传递多个参数
public static void Test1(params int[] a)
{
//取出所有的参数
for (int i = 0; i <a.Length; i++)
{
Console.WriteLine(a[i]);
}
}


被折叠的 条评论
为什么被折叠?



