C#高级编程

简介

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

命名参数&可选参数
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指向的也就是这个对象的值了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值