1,封装,生活中的封装就是把一堆零碎的东西,打包成一个东西。
2,属性封装了字段,方法的多个参数封装成了一个对象,将一堆代码封装到了一个方法,将一些功能封装到了几个类中,将一些具有相同功能的代码封装到了一个程序集中,并且对外提供统一的访问接口
3,继承中的几个关键词Base Class → 基类,Parent Class → 父类,Derived Class → 派生类,Child Class → 子类
4,继承的好处:代码重用,多态
5,继承的特性:
1>继承的但根性:不能同时继承多个类(解决方案:实现接口);
2>继承具有传递性:基类如果没有继承显示继承类,就默认继承了Object类,继承基类的子类也将继承Object类。这个就叫继承的传递性
3>C#任何一个类都是继承Object类(默认继承),如果一个类没有显示继承任何一个类,则默认继承Object类,如果显示的指定了当前类继承了某个类,则将覆盖默认的 Object类
6,继承中构造函数:
1>构造函数不能被继承
2>子类中的构造函数会默认去调用父类的无参数的构造函数,如果父类添加了有参数的构造函数就会,报错。
(1)解决此错误是在父类中添加一个无参数的构造函数即可
public class Person
{
public Person()
{
}
public Person(string name,string age)
{
}
}
public class Student:Person
{
public Student(string name,int age)
{
}
}
(2)也可以通过base关键词调用父类有参数的构造函数。
public class Person
{
public Person(string name,string age)
{
}
}
public class Student:Person
{
public Student(string name,int age):base("xx",10)
{
}
}
3> base关键词的作用:1,调用父类中的构造函数;2调用父类中的成员
4> this关键词的作用:1,调用当前类的其他构造函数;2作为当前类的对象调用当前类的成员
7,对象初始化器:Person p=new Person(){Name,Age,Gender};
8,访问修饰符
1>private 只能在当前类的内部使用
2>protected 受保护的,当前类内部,以及子类内部
3>internal 当前程序集内部,也就是当前项目内使用,没有访问修饰符的类及成员默认为internal
4>protected internal 相当于同时具有protected和internal的权限。在当前项目中可以访问,也可以在其他程序集有继承关系的类中访问
5>public 任何地方都可以访问
9,私有成员是否被继承
老师观点:1>虽然子类继承父类后,在创建子类对象的时候,父类中的那些私有成员也被分配了内存(子类中也有)。
2>但是,继承只是面向对象中的一个观念,目的是为了子类使用(多态,代码重用),私有成员即便被继承了,子类中也不能被访问,所以在面向对象中, 继承了但不能访问,没有意义
10,继承中访问级别约束。
1>子类访问级别不能高于基类,也就是说,如果子类是public,基类是internal,这样的话就不能被编译。
2>类的访问修饰符只有两种,public和internal。
3>可访问性必须一致
11,静态类,成员
1>调用静态方法的时候必须通过类名直接来调用,不能通过对象来调用
2>如果类需要实例化就一定不能写成静态类,也就是说静态类不需要实例化
3>静态成员会在整个程序退出时,才释放资源,所以可以再整个应用程序中共享数据
4>一般情况是,在这个类是一个工具类,里面都是方法。为了让用户调用的时候方便,不需要实例化对象,这时就可以将该类标记为静态类,此类只能包括静态成员。
不能包括对象成员。
5>当这个类需要被实例化的时候。如果这个类中有一个成员是所有对象都需要共享的数据,这时可以讲该类中的这个成员标记为静态的。但是这个类还是一个实例类
6>由于静态成员会在整个程序退出时,才释放资源,所以尽量避免写静态字段或静态属性,所以最好只写静态方法。
7>当给一个普通类添加一个静态字段后,系统会默认为该类生成一个静态构造函数,并且静态构造函数不能有访问修饰符,并且不能带参数
8>静态类的构造函数,只会在第一次使用静态类之前执行,并且只会执行一次,
9>静态类只能继承自Object,静态类不能继承其他类。
12,sealed关键字。
1>sealed关键字声明一个密封类,此类将不能被继承。
2>sealed关键字可以用于禁止重写该方法。
|
|