墨山箐
发布于 2025-06-23 / 6 阅读
0
0

C#补充知识入门篇(上)

C#补充知识入门篇(上)

命名参数

通过显示地使用参数名传参,实现变序传参

作用:

​ 可以越过中间拥有默认值的参数,传递其他参数。但是命名参数的传递必须放在最后面。

void SetStudent(string name, int age = 10 ,string grade = "六甲班" )
{
    Console.WriteLine("你好,我是"+ name + ",年龄:" + ",班级:"+ grade )
}
//此处实参,并不是按照上面方法的形参顺序填写,仍可以传递
SetStudent(age:18,name:"XiaoMing",grade:"六一乙班");

动态类型

​ java不支持

作用

​ 使用dynamic关键字可以声明动态类型变量,通常用于C#调用动态类型语言(如JavaScript,Python)时候使用,其他场景尽可能不要使用,Unity3D中常用的IL2CPP不支持dynamic。

dynamic  a =  123;
a = "123";  //编译通过

缺点

1. 开销比静态变量大,总体小于反
2. 编译时通常不会有成员提示检查,如果访问了不存在的成员会抛出异常
3. 类型不直观,不易维护

数字字面量声明

​ java 7 / C# 7.0

作用

​ 在数字声明时,中间插入_ 方便阅读,实际输出和存储不变,任何进制都可以

int  a = 1_234_567;	//默认十进制声明
int  b =  0x1A_2F;	//16进制
int  c  = 012_3;	//java支持八进制,C#不支持
int  d  = 0b10_10; 	//二进制

引用相关特殊用法

ref

​ 在 C# 7.0 之后,ref还能使用在变量声明的过程中,表示这一个变量是一个引用变量。

//①引用一个变量
//ref 类型 引用变量名 = ref 被引用的变量;
{
    int a = 21; 
	ref int  b = ref  a;
    b  = 15;
    Console.WriteLine(a);//输出结果 15
}

//②引用变量的成员
//ref 类型 引用变量名 = ref  被引用的变量.成员
{
    ref int age = ref person.age;
    age = 13;
    Console.WriteLine(person.age);//结果输出13
}

//③引用方法的返回值
//ref 类型 方法名 () { retrun ref 非局部变量;}
// ref 类型 变量名 = ref 方法名();
{
    var nums = new []{1,2,3}
    ref var res = ref Find(nums,3);
    res = 5;
    Console.WriteLine(string.Join(",",nums));//1,2,5
    ref int Find(for循环查找...)
}
//方法的引用不可以使用在局部变量以及局部结构体中,只能引用在堆内存中的变量
//但是引用数据类型可以被引用并延长生命周期

in

​ 强调该参数是按值传递的只读引用,不允许在函数内部对其字段进行修改

ref readonly

C# 7.2 可以用于方法中修饰返回类型,代表函数返回的是一个**只读**的属性。

​ C# 12.0 后也可以用于修饰方法参数,强调参数是通过引用传递的,同样是只读的。

静态局部函数

​ 局部函数前面添加static关键字,则失去闭包功能,不可访问外部函数的局部变量。(用于指定某个方法内部的自行调用,鸡肋的功能)


评论