简介
过一下基础东西,学习一下不常用的特性
命名参数&可选参数
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指向的也就是这个对象的值了
网友评论