美文网首页
c# 语法基础速览(跳过与Java C++一致部分)

c# 语法基础速览(跳过与Java C++一致部分)

作者: CieloSun | 来源:发表于2017-08-10 16:02 被阅读0次

    C# 变量类型

    • sbyte
    • byte
    • short
    • ushort
    • int
    • uint
    • long
    • ulong
    • float
    • double
    • decimal
    • char
    • bool
    • string

    switch

    默认不能穿透,但是也必须有break用于结束。

    显式转换

    显式转换时默认unchecked,可以调用checked方法去调用。

    显式转换可以用括号或者Convert类的方法。

    使用as运算符,不能转换返回null,但是as方法不能转换为不能为null的基本类型。

    枚举

    枚举使用基本类型。

    foreach

    foreach(int item in items){
        WriteLine(item);
    }
    

    多维数组

    多维数组

    int[,] itemsMatrix=new int[3,4];
    

    访问

    itemMatrix[3,4];
    

    锯齿数组

    int [][] itemMatrix=new int[2][];
    itemMatrix[0]=new int[3];
    itemMatrix[1]=new int[4];
    

    引用

    • ref: 在引用前需要赋值。
    int a=0;
    Increase(ref a)
    
    • out: 在引用前不需要赋值,实际上,也无法赋值,传入的是新值。
    static void OutTest(out int a)
    {
        a = 20;
    }
    static void Main(string[] args)
    {
        OutTest(out int a);
        Console.WriteLine(a);
    }
    

    委托

    关键字delegate, 定义委托后,可以传入方法进行执行。

    委托通常作为事件的类型使用。

    属性

    基本写法

    private int c;
    public int C
    {
        get
        {
            return c;
        }
        set
        {
            c = value;
        }
    }
    

    自动属性

    public int Value{
        get;
        set;
    }
    

    get和set可以选择性写一个,表示只读或者仅可写,自动属性可以添加默认值如下:

    public int Value{
        get;
        set;
    }=0;
    

    继承和多态

    隐藏基类成员

    不加override则会隐藏,但是会警告,使用new 关键字修饰方法可以直接隐藏。用new覆盖的方法和用override重写的方法,其主要区别是多态时的调用区别。重写会改变父类型的方法,即使用父类型调用子类型实例的该方法时运行子类型的方法,而覆盖则不会。

    调用基类方法

    可以用base

    识别类型

    typeof()

    is

    c# 6.0后可以用if(object is Type reNameObject)这种形式去使用is以更方便的开发。

    运算符重载

    也可以通过实现一些方法来进行,比如,继承Comparable类并实现CompareTo方法。

    可空类型

    用于基本类型:如int?

    ??

    op1??op2
    等价于
    op1==null?op2:op1

    另一种常见做法是,在c# 6.0里

    if(a!==null) a.method();
    

    可简写为

    a?.method();
    

    单独说一下,对于事件,在过去

    if(myEvent!=null) myEvent();
    

    现在c# 6.0可以写成

    myEvent?.Invoke();
    

    初始化器

    用{}表示,内容为变量名=赋值。

    也可以用于给集合类初始化,按顺序即可。

    例如:

        class Connection
        {
            //事件声明
            //EventHandler是系统自建的用于处理事件的委托
            public event EventHandler<MessageArrivedEventArgs> MessageArrived;
            public String Name { get; set; } = "Default Connection";
            private Timer pollTimer;
            public static Random random = new Random();
            public Connection()
            {
                pollTimer = new Timer(100);
                //达到时间间隔时用CheckForMessage方法处理事件。(类型EvenHandler<MessageArrivedArgs>已经隐式转换)
                pollTimer.Elapsed += CheckForMessage;
            }
        }
    

    可以这样初始化

    Connection connection = new Connection { Name = "First Connection" };
    

    类型推断

    var(同C++ auto),实际应用中非常广泛。

    可选参数

    Optional 修饰 或者 默认值为false

    命名参数

    传参时用参数名:参数格式传,建议使用时全部使用命名参数

    Lambda

    类似于java8的lambda,但是不限制于特定接口才能运用lambda,自由度很大。

    public void Connect() => pollTimer.Start();
    

    相关文章

      网友评论

          本文标题:c# 语法基础速览(跳过与Java C++一致部分)

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