1 C#的优点
- C#中指针已经消失. 允许对原始指针的有限制的使用.
- 基于.NET平台的,继承了自动内存管理和垃圾回收的特点.
- C#拥有内建的支持来将任何组件转换成一个web service,运行在任何平台上的任何应用程序都可以通过互联网来使用这个服务.
- 面向对象
2 C#中的数据类型
类型 | 描述 | 范围/精度 | 例子 |
---|---|---|---|
object | 所有其它类型的最根本的基础类型 | object o = null; | |
string | 字符串类型 | string s= “Hello”; | |
sbyte | 8-bit 有符号整数类型 | –128…127 | sbyte val = 12; |
short | 16-bit 有符号整数类型 | –32,768…32,767 | short val = 12; |
int | 32-bit 有符号整数类型 | –2,147,483,648…2,147,483,647 | int val = 12; |
long | 64-bit 有符号整数类型 | long val1 = 12; | |
byte | 8-bit无符号整数类型 | 0…255 | byte val1 = 12; |
ushort | 16-bit无符号整数类型 | 0…65,535 | ushort val1 = 12; |
uint | 32-bit无符号整数类型 | 0…4,294,967,295 | uint val1 = 12; |
ulong | 64-bit无符号整数类型 | ulong val2 = 34U; | |
float | 单精度浮点数类型 | float val = 1.23F; | |
double | 双精度浮点数类型 | double val1 = 1.23; | |
bool | 布尔类型类型; | true,false | bool val1 = true; |
char | 字符类型; 一个字符数据是一个Unicode字符 | char val = ‘h’; | |
decimal | 精确十进制类型,有28个有效位 | decimal val = 1.23M; |
3 接口与类的理解
类,可以理解为功能的集合.类也可以看做是实现一种功能的集合或者方法。
接口可以理解为对类的规定,对类的约束,甚至对整个项目的约束。模版,定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。
接口不能被实例化。接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。但接口是一个行为的规范,里面的所有东西都是抽象的!一个类只可以继承一个基类也就是父类,但可以实现多个接口。
类和接口的相同点在于其都可以从多个接口继承,都可以包含事件,索引器,属性等。
4 类和结构的区别
- 值类型与引用类型
● 结构是值类型:值类型在堆栈上分配地址
● 类是引用类型:引用类型在堆上分配地址
- 继承性
● 结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然没有明确sealed声明,可结构是隐式的sealed .
● 类:完全可扩展的,除非显式声明sealed, 否则类可以继承其他类和接口,自身也能被继承 。
注:虽然结构不能被继承 ,可结构能够继承接口,方法和类继承接口一样 。
- 内部结构的区别:
结构:
● 没有默认的构造函数,可以添加构造函数
● 没有析构函数
● 没有 abstract 和 sealed(因为不能继承)
● 不能有protected 修饰符
● 可以不用new 初始化
● 在结构中初始化实例字段是错误的
类:
● 有默认的构造函数
● 有析构函数
● 可以使用 abstract 和 sealed
● 有protected 修饰符
● 必须使用new 初始化
5 using和new
- using 的用途是为某个namespace建立别名,或者引用存在系统中的其它namespace.
- New 用来创建实例,或者覆写方法。
6 overload、overwrite、override
overload:重载(过载)
- 使用的地方:同一类里。(其实是同一类里同一名称的方法不同版本的一种叫法)
- 要重载的方法和被重载的方法要求:
- 方法名称相同;
- 参数列表不同
<1> 参数个数不同
<2> 参数个数相同,但至少有一个参数的类型不同; - 参数返回值类型不能作为重载区分的依据
overwrite:重写
- overwrite不是C#的关键字;
- 重写时使用的关键字是new;
- 重写的方法,方法签名必须相同(方法名相同+参数列表不同+返回类型不做区分);
- new关键字重写,就像父类里不存在这些方法一样.
- 如果子类中方法的签名和父类中相同,但是没有加new或者override关键字,此时编译器会发出警告.
“子类方法"隐藏了继承的成员"父类方法”, 如果是有意隐藏,请使用关键字 new. - 如果父类中没有该方法,却加了new关键字,编译器也会发出警告:
成员“子类方法”不会隐藏继承的成员。不需要关键字 new
override:覆盖
- 使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。
- 不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。其中抽象方法是必须覆写的。
也就是说,用 override 修饰符重写的基类中的方法必须是 virtual, abstract 或 override 方法。 - 要求:相同的方法名称;相同的参数列表;相同的返回类型。