c# async const readonly as () TyprOf() base break checked default(T) event extern finally fixed is new out params params ref sealed sizeof 可空类型(Nullable) ? ??

abstract修饰符可用于类,方法,属性。在类声明中使用abstract指明这个类仅用作其他类的基类,而不用于实例化,标记为抽象的成员必须由派生自抽象类的非抽象类来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
abstract class Shape
{
public abstract int x { get;}
public abstract int GetArea();
}
class Square : Shape
{
int side;
public Square(int n)
{
this.side = n;
public override int GetArea()
{
return side * side;
}
public override int x
{
get
{
return x + 10;
}
}
interface I
{
void N();
}
abstract class C : I
{
public abstract void N();
}
}

抽象类功能:

  1. 抽象类不能实例化
  2. 抽象类可能包含抽象方法和访问器
  3. 无法使用sealed修饰符来修改抽象类
  4. 派生自抽象类的非抽象类,必须包含全部已继承的抽象方法和访问器的实际实现

抽象方法功能:

  1. 抽象方法是隐式的虚拟方法
  2. 只有抽象类中才允许抽象方法声明
  3. 抽象方法没有主体,仅以 ; 结尾,签名之后没有大括号 {}
  4. 抽象方法中不能使用static或virtual关键字修饰

抽象属性:

  1. 静态属性上不能使用abstract修饰符
  2. 通过包含使用override修饰符的属性声明,可在派生类中写抽象继承属性

async

修饰符可将方法,lambda 表达式或匿名方法指定为异步。如果对方法或表达式使用此修饰符,则称其为异步方法

const

使用const 关键字声明某个常量字段或常量局部变量,相当于Java中的static final 组合

readonly

const关键字不同。const字段只能在该字段的声明中初始化。readonly字段可以在声明或者构造函数中初始化。因此,根据所需要使用的构造函数,readonly字段可能具有不同的值。

as

将结果显示转换为给定的引用或可以为null值的类型,如果无法进行转换,则as运算符返回null,与强制类型转换不同,as运算符永远不会引发异常

()

强制转换运算符(T)E表达式E的结果显示的转换为T,如果转换失败,则发生编译时错误

TyprOf()

用于获取某个类型的System.Type实例,

base

  1. 关键字用于从子类中访问父类的成员,
  2. 调用基类上已被其他方法重写的方法,
  3. 指定创建子类实例跳跃父类构造函数

break

语句将终止其所在位置的最接近封闭循环或switch语句,控制权传递给已终止语句后面的语句

checked

对整型类型算术运算和转换显示启用溢出检查

default(T)

生成T类型的默认值:T t = default(T);

event

声明发布服务器类中的事件,事件是天生的多播委托,没有赋值,只有+=以及-=操作,事件可以做到隔离保护,数据安全。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
namespace ConsoleApp3
{
public delegate void GreetingDelegate(string name);
public class GreetingManager
{
public event GreetingDelegate greetingDelegate;

public void GreetPeople(string name)
{
greetingDelegate(name);
}
}
class Program
{
private static void EnglishGreeting(string name)
{
Console.WriteLine("Morning , " + name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("zao shang hao ," + name);
}
//public static void GreetPeople(string name, GreetingDelegate MakeGreeting)
//{
// MakeGreeting(name);
//}
static void Main(string[] args)
{
GreetingManager gm = new GreetingManager();
gm.greetingDelegate += ChineseGreeting;
gm.GreetPeople("ike qi");
gm.greetingDelegate += EnglishGreeting;
//gm.greetingDelegate = EnglishGreeting;
//gm.greetingDelegate += ChineseGreeting;
gm.GreetPeople("qi ya nan ");
//gm.GreetPeople("Ike Qi", EnglishGreeting);
//GreetingDelegate greetingDelegate=new GreetingDelegate(EnglishGreeting);
//greetingDelegate = EnglishGreeting;
//greetingDelegate += ChineseGreeting;
//greetingDelegate("qiyanan");
//GreetPeople("qiyanan",greetingDelegate);
//greetingDelegate -= ChineseGreeting;
//greetingDelegate("zhang hong chao ");
Console.ReadKey();
}
}
}

operator和implicit或explicit

分别用于定义隐式转换或显式转换,定义转换的类型必须是该转换类型或目标类型。可用两种类型中的任何一种类型来定义两种用户定义类型之间的转换。

extern

修饰符用于声明在外部实现的方法,还可以定义外部程序集别名,使得可以从单个程序集中引用同一组件的不同版本

finally

通过使用 finally 块,可以清除 try 块中分配的任何资源,即使在 try 块中发生异常,也可以运行代码。 通常情况下,finally 块的语句会在控件离开 try 语句时运行。

fixed

可防止垃圾回收器重新定位可移动的变量

is

运算符检查表达式的结果是否与给定类型兼容

#lock #
获取给定对象的互斥 lock,执行语句块,然后释放 lock。 持有 lock 时,持有 lock 的线程可以再次获取并释放 lock。 阻止任何其他线程获取 lock 并等待释放 lock。
当同步对共享资源的线程访问时,请锁定专用对象实例
private readonly object balanceLock=new object();
避免将以下对象用作lock对象:
this,Type实例,字符串实例,包括字符串文本

new

  1. 运算符创建类型的新实例,
  2. 可用作成员声明修饰符或泛型类型约束。
  3. 可以显式隐藏从基类继承的成员。 隐藏继承的成员时,该成员的派生版本将替换基类版本。 虽然可以不使用 new 修饰符来隐藏成员,但将收到编译器警告。 如果使用 new 来显式隐藏成员,将禁止此警告

out

作为参数修饰符,它允许按引用而不是按值向方法传递参数。接口和委托的泛型类型参数声明中,该声明指定类型参数为协变。

params

关键字可以指定采用数目可变的参数的方法参数。

params

关键字之后不允许有任何其他参数,并且在方法声明中只允许有一个 params 关键字。params 参数类型必须是一维数组

ref

关键字指示按引用传递的值要使用 ref 参数,方法定义和调用方法均必须显式使用 ref 关键

sealed

修饰符可阻止其他类继承自该类

sizeof

用于获取非托管类型的大小

可空类型(Nullable)

C# 提供了一个特殊的数据类型,Nullable类型,表示一个数据类型可以赋值为空

?

在数据类型后面加上 ? 可使其变成可空类型
int? x=null;

??

如果 ?? 前面的操作数的结果是null,则返回 ?? 后面操作数的值,否则就是前面操作数的值