索引器:
string this[int index] //重载则参数列表不同
{
get{}
set{} //常与switch{index}{ case 0:···;break;}连用
}
格式化字符串:
console.writeline("The value:{0,10:C}.",a);
静态关键字static,动态关键字dynamic
分部关键字partial
可用在class、struct、interface之前
分部方法的格式必须为partial /*不能有访问修饰符,默认为private*/ void add(index/*不能包含out参数*/);
常量const与C++ #define类似,没有自己存储的位置
params 参数数组,用于参数数不确定
调用方法时内存从栈的顶部开始分配,这块内存叫栈帧
属性:
没有任何存储位置
常和字段关联,称为后备字段
get访问器必须要有返回值,有隐式参数value
无后备字段的话则可
int MyValue //不能提供访问器的方法体
{
set;
get;
}
new Point(){x=5,y=6}初始化语句,前提为public变量,其中()可省略
readonly关键字,必须在类的构造函数中使用
C#的new关键字的几种用法
三种用法如下:
在 C# 中,new 关键字可用作运算符、修饰符或约束。
1)new 运算符:用于创建对象和调用构造函数。这种大家都比较熟悉,没什么好说的了。
2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。
3)new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型
父—>子:显式
子—>父:隐式
虚方法
父:virtual 子:override
方法和属性都可覆写
构造函数的调用顺序
1)初始化实例成员时调用
2)调用基类构造函数
3)调用子类构造函数
例:public add(int x):base(x)//指定基类的构造函数,也可用this(x)指引用子类的另一个构造函数
C#类、方法的访问修饰符
补充:
- 抽象方法关键字abstract,必须被子类覆写且没有实现体
- 抽象类指设计为被继承的类。父:abstract 子:override
- 抽象方法必在抽象类中
- sealed密封,不可被继承
C# 扩展方法
静态类
- 静态类成员都为静态
- 可有一个静态构造函数,但不能有实例构造函数,为隐式密封的,不能被继承
C# 命名规范
C#语法文本字面量
补充:
- 逐字字符串字面量以@字符为前缀,其字符串除了相邻的双引号组以外均不再进行转义,严格按照字符串内容表示。
- 逐字字符串字面量的双引号组被转义为单个双引号。
用户自定义类型转换
例: public static implicit operator int(limit li)
static是必需的,implicit为隐式转换关键字,explicit为显式转换关键字,int为目标类型,limit为源类型
运算符重载
例:public static (预定义类型) implicit operate (运算符)(参数)
反射机制:typeof运算符 和 GetType() 函数
C#中强制转换、Convert转换 和Parse转换的差异
可以在代码前加 (标签名): (代码)
形成一个标签,然后通过goto语句跳转
C#枚举中使用Flags特性
资源是指一个实现了System.IDisposable接口的类和结构
using语句
在程序编译阶段,编译器会自动将using语句生成为try-finally语句,并在finally块中调用对象的Dispose方法,来清理资源。所以,using语句等效于try-finally语句。
using(实现了IDisposable接口的资源)
{
···; //相当于try-catch语句的隐式调用
}
C# 可空类型(Nullable)
C# String与StringBuilder
C# 数组是对象,如array[,]称为秩说明符等于1,方括号里的逗号为秩说明符
C# 委托(Delegate)
补充:
- 委托在类外定义
- 委托对象创建后不能再改变
- ’+‘和’-‘看似改变,实际上是创建一个新的
- lambda表达式
C#事件(event)解析
补充:
- 事件在类里创建,参数列表与委托类型的相匹配,格式为
public event (委托类型名) (事件名);
- 访问修饰符必须声明为public
- 标准事件使用的委托类型名为 EventHandler,系统定义的委托
void EventHandler(object sender,EventArgs e);
可以通过扩展(继承)EventArgs来传递数据
第一个参数用来保存触发事件的对象的引用 - 创建事件时可以添加事件访问器 如:
public event EventHandler aa
{
add
{
``` //相当于执行+=运算符的代码
}
remove
{
``` //相当于执行-=运算符的代码
}
}
两个访问器都有value的隐式值参数
事件访问器表现为void方法,也就是不能使用包含返回值的return语句
强制转换运算符as和is
- as运算符 例:
p=bill as Person;
是的则返回引用,否的话则返回null - is运算符 例:
p=bill is Person;
是的则返回ture,否的话则返回false
溢出检测上下文
- 代码片段是否被检查称作溢出检测上下文,默认为不检查
- checked和unchecked运算符控制是否检查,如果使用了checked,例:
int a;
float c;
a=checked((int)c);//如溢出则抛出异常
C#泛型详解
泛型转换
- 协变 <out T> 由子到父
- 逆变 <in T>由父到子
详解C# 迭代器
补充:
- 创建一个类实现IEnumerable接口,称为可枚举类
- 实现GetEnumerator方法返回对象的枚举器
- 枚举器指实现了IEnumerator接口的类
- IEnumerator含有三个函数成员:Current、MoveNext和Reset
- 迭代器创建枚举器,使用
yield return ···;
迭代语句块