一:面向对象的三大特征
封装,继承,多态
封装
1:封装的概念及作用
*通过使用private和public修饰符来修饰类的成员(字段,属性,方法等)这样有效的使私有数据和方法不被外界访问,这种使用特性就是封装;
*一个属性,一个方法也是封装,类是对属性和方法的封装;
*封装是面向对象中的一个重要特征,面向对象的三个重要特征为:封装,继承,多态;
*作用<模块化和数据隐藏>
2:类是模版,确定的对象将会拥有的特征(属性)和行为(方法);任何对象将会属于一个类中;
3:对象是以类为模版而创建的,是类的实例化,具体化;
4:面向对象的好处
*封装使得开发人员更加关注自己的需求;
*一个类定义之后可以多次使用,避免重复赋值;
5:类试图 对于类的总体结构的展示;类(右键-----查看类图)
6:类的祖先(object)
*Object类是所有类的父类(祖先类),因此任何一个类都可以转换成object类型;
*可以将任何类型的值赋予object类型的变量;
装箱:将值类型的变量转换为<object>对象的过程叫做装箱;
拆箱:将<object>对象类型的变量转换为值类型的过程叫做拆箱;
继承
*一个类继承另一个类,第一个类叫做子类,另一个叫做父类,子类继承父类,即子类就拥有了父类的属性和方法,可以重写<override>父类的方法和属性,同时子类也可以编辑自己的属性和方法。<Object类>
*子类不能继承父类的私有成员
*子类只能有一个父类,但是作为父类的类可以是多个子类的父类。
1:关键字Virtual
Virtual关键字用于指定属性或方法在派生类中重写. 默认情况下,派生类从其基类继承属性和方法,如果继承的属性或方法需要在派生类中有不同的行为,则可以重写它,即可以在派生类中定义该属性或方法的新实现,这时在基类中该属性或方法必须用virtual关键字修饰.virtual关键字用于指定属性或方法时可以在派生类中重写.具有virtual关键字的方法或属性被称作虚拟成员.
在基类(父类)中用virtual修饰符声明一个虚方法,然后在在派生类(子类)中用override修饰符覆盖基类虚方法。表明是对基类的虚方法重载。这种优势在于它可以在程序运行时再决定调用哪一个方法,这就是所谓的“运行时多态”,或者称动态绑定。
class A { public virtual void F(){} } class B:A { public override void F(){} }
多态 <编译时多态,运行时多态>
*和重载的定义一样,可以这样说重载也多态的一种。
*定义类的继承发生在多个类之间,而类的多态发生在同一个类上,在一个类中可以定义多个同名方法,只要确定了它们的参数个数和类型不同。
理解下面这段话就了解了多态.
覆盖: 就是子类有和父类重名的方法和属性,此时父类的方法就被子类的覆盖掉了。相当于修改父类的方法。
二:对象数据类型与对象销毁
1:基本数据类型{int,double,bool.....},值类型;
引用数据类型{数组,对象,string},对象类型;
2: *引用类型变量传递时,将自己的内存地址赋给新变量{指针};
*值类型变量传递时,将自己复制一份;
这里值类型保存在栈里面,而引用类型,一部分保存在堆里面,一部分保存在栈里面.
3:ref关键字
可以将值类型变量按照引用方式传递;{实际开发中不建议经常使用ref关键字}
引用传参,必须进行初始化,
4:out关键字
可以让方法有多个返回值,侧重输出,引用传参,可以不进行初始化,但是必须在方法里面进行赋值。<return多个返回值的方法里面>
5: Params:当需要多个参数时,才会用到。数组类型参数。
6:对象的销毁
垃圾回收机制(GC)
*.net虚拟机特有的机制,自动运行,并检查对象的状态;
*发现对象不被引用时,会将其释放所占空间;
*在实际的应用中我们可以自己调用GC来帮助我们清理一些我们不需要的变量和字段。
三:非泛型集合
1:ArrayList是一个长度可变的“数组”,通常成为集合,类似于数组的结构,其中最大的特点是:可以自由的扩展元素个数;
2:ArrayList集合的特点
*元素都被转换成object类型
*使用Add方法可以随意添加元素,无个数限制;
*使用Remove方法可以删除指定元素,元素删除后索引自动调整;
*通过索引访问元素,元素取出的时候需要强制转换成特定数据类型;
3:Arraylist的具体插入,删除代码;
4:ICollection<T>泛型的知识
* IList<T>继承自ICollection<T>,ICollection<T>继承自IEnumerable<T>,IEnumerable<T>继承自IEnumerable
所以List<T>实现了IList<T>接口,也就是实现了IEnumerable接口
* IEnumerable<T>是IEnumerable接口的泛型版本。使用泛型,不会强行对值类型进行装箱和拆箱,或引用类型进行向下强制类型转换,使程序性能提高。泛型定义的变量有类型限制,所以泛型提高了程序的类型安全。 泛型还提高了代码的重用性。
四:泛型集合list<T>与Dictionary的使用
1:List<T>使用前的准备工作
*引入命名空间:System.Collections.Generic
*确定存储类型:List<Student> student=new List<student>();
常用方法
*添加元素:Add(<T>);
*删除元素:RemoveAt(索引);
*元素个数:count
遍历集合
Foreach(Student stu in students) { Console.writeline(stu.studentName); }
2:泛型集合的最大特征:严格约束集合内的元素类型;
3:集合初始化器
创建集合对象时直接初始化,非常类似与数组;
4:Dictionary<k,v>通常称为字典
*<k,v>约束集合中的元素类型
*编译时检查类型约束;
*无需装箱拆箱操作
*与哈希表操作类视