-
【构造函数】
作用:派生类对象中,包含基类的信息,在执行派生类的构造函数的时候,会先去隐式或显式的,调用基类构造函数。因为是有了基类才有派生类
调用顺序:引用类的 实例成员初始化>基类>引用类
【在派生类中直接调用基类构造函数】
实例:基类
基类私有属性 protected string _Name;
基类定义构造函数public Pet(string name){_Name = name;}
派生类引用基类构造函数(通过base直接去引用基类构造函数)
派生类定义构造函数public Dog(string name):base(name){}
查看全部 -
扩展:
在不动原有的类的情况下扩展方法
查看全部 -
结构适用场合
查看全部 -
结构(Struct)和类区别
查看全部 -
接口就是指定一组函数成员,而不实现他们的应用类型
interface IcatchMice
{
void CatchMice();
}
接口只能用来被实现,就像抽象类只能用来被继承;
接口里不能有public ,也不能有实现;
Cat:ICatchMice
{
public void CatchMice(){...}
}
接口也是一种引用类型;
一个类可以实现多个接口;
类实现接口,要实现接口里面的成员,这个时候既要声明为public 又要实现函数体
查看全部 -
1、如果是基类方法不希望子类对其重写,就不声明为virtual 2、如果是派生类不希望其子类(即派生类的派生类)对其进行重写,同时是override重写,就可以使用sealed机制(即同时使用override和sealed)
查看全部 -
抽象类的存在目的,就是被继承
查看全部 -
虚方法 (virtual) 可以不重写 (override) ,抽象(abstract )必须 重写 (override) ,因为抽象方法没有函数体;
有抽象方法,类必须是抽象类;
查看全部 -
基类(Pet)的引用可以指向派生类(Dog);派生类是基类的一种特殊情况;
声明为virtual 就是虚方法 ;
基类的虚方法可以在派生类中使用override
查看全部 -
虚方法的其他知识点:
1、重写虚方法必须具有相同的可访问性,且基类方法不能是private
2、不能重写static方法或者非虚方法
3、方法、属性、索引器、事件都可以声明为virtual或者override
多态:通过指向派生类的基类引用,调用虚函数,会根据引用所指向派生类的实际类型,调用派生类中的同名重写函数,便是多态。
查看全部 -
隐藏方法:
我们不能删除基类中的任何成员,但是可以用与基类成员名称相同的成员来屏蔽基类成员
细节:
1、屏蔽数据成员:在派生类中声明名称和类型相同的成员
2、屏蔽函数成员:在派生类中声明新的带有相同函数签名的成员
(注:此处不包括相同的返回值类型,只是参数列表相同,函数名相同)
3、让编译器知道:可以添加new关键字,否则会有警告
示例:基 类 public void PrintName();
派生类 new public void PrintName();
查看全部 -
每个派生类,只能继承自一个父类(单继承),但其父类也可是继承与其父类的派生类(默认都继承自Object类)
继承层次
派生类祭城父类,定义: 派生类名:父类名
class ChildClass:ParentClass
查看全部 -
面向对象编程的特点:封装、继承、多态
查看全部 -
接口是一组指定方法查看全部
-
泛型类就是相当于一个模板,然后我去给这个模板传递什么参数值然后会根据我传递的这个值去生产出来个性化的东西
然后泛型类定义的方法是:/T是一中类型,可能是猫啊狗啊的。然后根据这个传递的类型,其实有点类似于实参,然后我们去创建出不哦她那个的对象来进行处理,可以减少编写重复的代码
class A <T>{
T[]petsArray;
public void PutIn(t PET){...}
public T TakeOut(int index){.......}
}
实例化语句:
A<Dog> dog; //A<Dog>类型的引用
dog=new A<Dog>();//构造实例
var cat=new A<Cat>();
查看全部
举报