C#高级编程

it2025-10-03  10

简介

过一下基础东西,学习一下不常用的特性

命名参数&可选参数

private void Start() { int result; result = Add(1, 1, 1); //命名参数 变量名和值对应 result = Add(x: 1, y: 1, z: 1); //可以改变变量顺序 result = Add(x: 1, z: 1, y: 1); //可选参数 有一个默认值 result = Add2(1); result = Add2(1, 1); //结合命名参数 result = Add2(1, z: 1); } private int Add(int x, int y, int z) { return x + y + z; } private int Add2(int x, int y = 2, int z = 3) { return x + y + z; }

可空类型

?? :合并运算符 ?:可空类型 int x = 1; int? y = null;//定义可空类型变量 //int -> ? int? z = x; //? -> int int a = y.HasValue ? y.Value : -1; int a = y ?? -1; int? y = x ?? 1000;//使用合并运算符,当变量x为null时,预设赋值1000

构造函数

构造函数初始化器:

this:对于同一个类构造函数调用 base:对于基类构造函数调用 public class MyClass { private static MyClass _instance; public static MyClass Instance { get { return _instance ?? new MyClass(1); } } private int _x; private int _y; private string _log; private MyClass(int x, int y, string log) { _x = x; _y = y; _log = log; Debug.LogError(_log); } //if private MyClass(int x) : this(x, 1, "MyClass") { } //else private MyClass(int x) { _x = x; _y = 1; _log = "MyClass"; Debug.LogError(_log); } }

Lambda表达式

学习多用鸭 好有用

public struct MyStruct { public int X { get; set; } public int Y { get; set; } public MyStruct(int x,int y){ X = x; Y = y; } //if public int Add => X + Y; //else public int Add() { return X + Y; } }

值和引用类型

ref:找到类型的引用 out:一个方法返回多个值,一是方法添加多出来的成员变量,二是使用元组,三就是使用out //结构体 public struct My1 { public int X { get; set; } public My1(int x) { X = x; } } //common private void Change(My1 m) { m.X = 2; } //ref private void ChangeRef(ref My1 m) { m.X = 2; } //if My1 my1 = new My1(1); my1.X = 2; //2 改变 //elseif My1 my1 = new My1(1); Change(my1); //1 不变 //else My1 my1 = new My1(1); ChangeRef(ref my1); //2改变 //类 public class My2 { public int X { get; set; } public My2(int x) { X = x; } } //common private void Change(My1 m) { m.X = 2; } //ref private void ChangeRef(ref My2 m) { m.X = 2; m = new My2(3); } //if My2 my2 = new My2(1); Change(my2); //2 //elseif My2 my2 = new My2(1); ChangeRef(ref my2); //3 m被分配了一个新的对象,即new My2(3),m指向的也就是这个对象的值了
最新回复(0)