1.类和结构
类和结构都是创建对象的模板,每个对象都包含数据以及处理数据和访问数据的方法,例如:有一个Customer的顾客类,可有顾客ID/顾客姓名/顾客地址,以及顾客的其他信息,还可以定义处理这些数据的功能,接着就可以实例化这个类,表示具体的某个顾客,用来给这些顾客的字段赋值,并使用其功能。
结构不同于类,类是引用类型,结构是值类型,是存放在栈(Stack)上的,另外结构不支持继承,较小的数据结构可使用结构。
不同点:
- 类引用类型,结构是值类型。
- 定义语法的关键字不同,类class和结构struct。
- 存储的地方不一样,结构在栈(Stack)存储,类在堆(heap)中存储。
- 类支持继承,结构不支持继承。
相同点:
- 都使用new关键字来声明实例,并对其进行初始化
类
类的成员: 字段 常量 方法 属性 构造函数 索引器 运算符 事件 析构函数 类型
1. 方法
-
方法的重载:
- 方法名称不同
- 方法的参数个数不同
- 方法的参数类型不同
-
方法的参数
- 命名的参数
- 可选参数(可选参数必须是最后一个)
- 可变参数(parmas type[] )
2. 构造函数
- 构造函数也是可以重载的
- readonly 字段只能在构造函数中初始化
3. 匿名类型
- var和new关键字组合使用的时候就形成了匿名类型,例如:
var captain=new { FirstName = "xxx",LastName="xxx" }
结构
结构虽然是值类型但是和类使用没什么区别,注意关键点就行了,例如:new运算符并不是在堆中分配空间,而是只调用的构造函数,并初始化了字段。结构派生自system.valueType,而System.ValueType又派生自System.Object。
1. 结构的构造函数
结构的构造函数和类的构造函数相同,同样可以重写默认的构造函数。
扩展方法
定义一个静态类,并在类名后面加上Extension,定义静态方法,并在形参前加this,例如:
public static class StringExtension
{
public static int ToInt32(this string str)
{
try
{
return Convert.ToInt32(str);
}
catch (Exception e)
{
return 0;
}
}
}
string str = "321";
var number = StringExtension.ToInt32(str);
Console.WriteLine(number);
number = str.ToInt32();
Console.WriteLine(number);