三大特性,封装继承多态
封装是把字段封装为属性,通过get set访问器进行访问,目的是为了对获取值和设置值进行控制,包括对值的验证和处理,访问的权限控制,主要是为了安全,字段定义为public就可以随
意的获取和修改字段,无法保证数据安全
public class test{
private string name;
public string name{
get{
return name;
}
set{
name=value;
}
}
}
访问修饰符有六种:public(公共,都能访问),protected(保护,当前类和当前类的子类访问),internal(内部,同一个程序集中的类可以访问),private(私有,当前类可以访问),
protected Internal(同一个程序集或当前类及当前类的子类),private protected(当前类或当前类的子类)
继承是类可以派生为子类,子类就是继承于父类,可以使用父类的成员变量和方法,是为了使代码复用,类是单一继承,只能继承一个父类,为了使用多重继承需要使用接口。
public class A{
public virtual void F()
{}
}
public class B:A
{
public override void F()
{}
}
public class C:A
{
public override void F()
{}
}
多个类继承同一个类,每个类都对父类进行重写产生的现象就是多态,说明继承是多态的基础
public class A{
public void function()
{}
}
public class B:A{
public void function()
{}
}
这时提示会把父类中的function方法隐藏,如果需要把父类方法隐藏,给子类function加上new
多态分为静态多态和动态多态,静态多态有运算符重载和函数重载,动态多态通过抽象类和虚方法实现
sealed是密封,有密封方法和密封类,主要是为了方式滥用继承,密封类不允许派生子类
密封类,此时B不能继承A,否则会报错
public sealed class A{
}
public class B{
}
密封方法,C类无法继承B类中的F2方法,另外修饰符的前后顺序没什么影响
public class A{
public virtual void F()
{}
public virtual void F2()
{}
}
public class B:A
{
public override void F()
{}
public override sealed void F2()
{}
}
public class C:B
{
public override void F()
{}
}
抽象类的特点:不能创建抽象类的实例,不能跟sealed同时使用,抽象方法只能放在抽象类中
申明类和实例类
public class Class1
{
public virtual string test()
{
return "1";
}
public string test2()
{
return "2";
}
}
public class Class2: Class1
{
public override string test()
{
return "3";
}
public new string test2()
{
return "4";
}
}
public class Class3 : Class2
{
public new string test()
{
return "5";
}
public new string test2()
{
return "6";
}
}
调用
Class1 class2 = new Class2();//Class1为申明类,Class2为实例类
Class1 class3 = new Class3();
string num = class2.test();//显示3
num = class2.test2();//2
num = class3.test();//3
num = class3.test2();//2
先走的是申明类的方法,如果申明类的方法不是虚函数就直接执行,所以test2都是执行的Class1的方法
如果是虚函数,判断实例类的方法是否有override,如果有就执行实例类的方法,所以Class2.test执行的是Class2的test方法
如果实例类的方法中没有override就去找实例类的父类,所以Class3.test2执行的是Class2的test方法
如果是没有找到override重写的,就执行Class1.test方法
如果不想使用基类中的方法,就在实例化类的时候实例化你想用方法的类,比如Class3 class3=new Class3();
这块内容详细内容地址:https://blog.csdn.net/qq_33380252/article/details/87256301