c# 语法要点速览

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];

调用类静态变量

ClassName.varName

(仅当和局部变量冲突时需要明示类名)

引用

  • 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();
原文地址:https://www.cnblogs.com/cielosun/p/7155547.html