美文网首页
C#高级编程

C#高级编程

作者: 叫我颜先生 | 来源:发表于2019-08-20 17:15 被阅读0次

简介

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

命名参数&可选参数

    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指向的也就是这个对象的值了

相关文章

  • 2017年度.C#学习规划.初步

    1.目标书籍:学习完这四本C#的书之后不再购买C#开发的相关书籍 《C#多线程编程实战》, 《C#并行编程高级教程...

  • C#编程

    wC#编程初级篇(2015版本) C#编程中级篇(2015版本) C#编程高级篇(2015版本) 可以关注链接里面...

  • C#高级编程

    简介 过一下基础东西,学习一下不常用的特性 命名参数&可选参数 可空类型 ?? :合并运算符 ?:可空类型 构造函...

  • 深入理解C#:编程技巧总结(一)

    具体转载地址见最下文 以下总结参阅了:MSDN文档、《C#高级编程》、《C#本质论》、前辈们的博客等资料,如有不正...

  • C#匿名方法、Lambda表达式和各种泛型委托

    Linq查询与高级C#编程机器理论研究基础 C#委托解决的是对象之间的逆向传递问题,其次,委托还有其他的用途(匿名...

  • C#简短介绍

    C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。 设计目标 C#旨在设计成为一种“简单、现代、通用...

  • c#与objective-c

    C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#以.NET框架类库作为基础,拥有类似Visua...

  • C#高级编程中文第七版.pdf

    【下载地址】 《C#高级编程(第7版)》的顶级专家作者团队首先复习了C#的基础知识,之后详细讲解了该语言和架构中的...

  • Step by step:一起来学C# (2)

    提纲: (1)C#的编程环境介绍 (2)C#的几个语言要素 (3)第一个C#的窗体程序 一、编程环境 C#的编程使...

  • 引用类型的参数加不加Ref的区别

    问题描述:引用类型的参数加不加Ref的区别? 解答 备注:C#高级编程(第10版) 3.6.1 ref参数(92页...

网友评论

      本文标题:C#高级编程

      本文链接:https://www.haomeiwen.com/subject/dlzpsctx.html