C#实训Day008:C#中的成员关系体系
这几天的课感觉上的进度太快了,很多东西都直接忽略了,两三天的时间就直接刚C#的基础知识大概了讲了下,但是效果并不怎么好,感觉头蒙蒙的,概念都变得有点混淆了,所以今天要花点时间来重新整理下C#中的成员关系体系

工具/原料
C#
方法/步骤
什么是类:
类是C#类型中最基础的类型,是一个数据结构,也是对象的集合,类主要有属性、字段、方法和函数组合在一个单元中,类可以继承于父类,也可以与其他的Class进行交互。
类是对对象的定义,它包含对象的名称、方法、属性和事件等相关信息。

类的构成:
类中可以包含以下成员:
1.常量: 数据值恒定不变的一个符号
2.字段: 字段表示一个只读或者可读写的数据值
3.构造器:是用来创建对象实例的方法,该方法没有返回类型。
4.方法:一个特殊的函数,用来更改或者查询一个类型或者对象的状态。
5.属性:用来封装字段在外部的访问,避免直接访问字段。
6.事件:封装一个委托链,通过某种触发机制,通知委托链中的方法执行。
7子类型:嵌套在类型中的类型,作用是分离复杂性。
8.操作符重载:重新定义在类所产生对象之间的特定操作
9.转换操作符:定义如何显示或者隐式的将类转换为另外一种类型。
10.索引器:使用索引器可以用类似于数组的方式为对象建立索引
那么在一个类中,怎么去分辨以下内容呢,小编已经开始萌圈了?

方法:
是包含一系列语句的代码块,程序通过调用该方法并指定方法参数使语句得以执行,用于实现由对象或类执行的计算(在 C# 中,每个执行的指令均在方法的上下文中执行)。
Main 方法是每个 C# 应用程序的入口点,并在启动程序时由公共语言运行时 (CLR) 调用。

通过指定访问级别(如 public 或 private)、可选修饰符(如 abstract 或 sealed)、返回值、方法的名称以及任何方法参数,在 类或 结构中声明方法,这些部件一起构成方法。
调用对象上的方法只要在对象名之后添加一个句点、方法名和括号。
类提供了用于动态创建类实例的定义,也就是对象(object)。类支持继承(inheritance)和多态(polymorphism),即派生类能够扩展和特殊化基类的机制。

类之间的关系:
两个相对独立的对象,当一个对象的实例与另外一个对象的特定实例存在固定关系时,这两个对象之间就存在关联关系。
1、单向关联:对象A可以访问对象B的方法和属性,而对象B不能访问对象A
2、双向关联:对象A可以访问对象B的方法和属性,对象B也可以访问对象A
3、自身关联:同一个类对象之间的关联
4、多维关联:多个对象之间存在关联
5、泛化:类与类的继承关系,类与接口的实现关系
6、依赖:类A要完成某个功能必须引用类B,则A与B存在依赖关系。
7、聚合:当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系。
8、组合: 对象A包含对象B,对象B离开对象A没有实际意义。
结构类型:
结构与类很相似,都表示可以包含数据成员和函数成员的数据结构。但是,与类不同,结构是一种值类型,并且不需要堆分配。结构类型的变量直接包含结构的数据,而类类型的变量包含对数据的引用。

结构声明
结构声明是一种用于声明新结构的类型声明:使用struct关键字
<访问修辞符> struct <结构名>
{
数据成员
成员函数
}
结构对于具有值语义的小的数据结构特别有用,这些数据结构的关键之处在于:它们只有少量数据成员,它们不要求使用继承或引用标识,而且它们适合使用值语义方便地实现。
结构体和类的区别:
1.值类型与引用类型 结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型.
类是引用类型:引用类型在堆上分配地址 堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑 因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
注: a.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object b.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用

2.继承性 结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed . 类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承
注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样

3.内部结构:
结构: 没有默认的构造函数,但是可以添加构造函数 (结构体中不能定义默认的、不带参数的构造函数,只能定义带参的构造函数)没有析构函数 没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化 在结构中初始化实例字段是错误的 类: 有默认的构造函数 (可以定义默认的、不带参数的构造函数,或者带参的构造函数)有析构函数
可以使用 abstract 和 sealed
有protected 修饰符
必须使用new 初始化

如何选择结构还是类 :
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类: 1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些 2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。 3. 在表现抽象和多级别的对象层次时,类是最好的选择4. 大多数情况下该类型只是一些数据时,结构时最佳的选择
花了点时间整理了下C#中的一些定义,小编主要在以上几方面出现了混淆,本来以为整理下思维可以帮助小编更好的理解C#,可是整理完之后小编发现,思路更混了。东西太多了,有种恐惧感了,看来着思路是错误的,得换个思路学习了。