一、封装
**封装属性:将类的某些信息隐藏在类的内部(用private修饰),不允许外部程序直接访问,需要访问也是访问该类为其提供的公共属性。
封装属性的作用:防止类中的数据被恶意修改。
封装属性的好处:1.可以隐藏类的实现细节
2.外部只能通过访问规定的属性来访问数据,保护数据
3.方便加入控制语句,即对数据做约束
快捷键:prop+TAB(限制封装) propfull+TAB(非限制封装) ;
//prop+TAB 这种封装不能修改属性的限制
例:
出生年龄必须大于0
//这种封装可以修改属性的限制 propfull+TAB
private int age;//private:私有 成员变量
public int Age //public:公共 属性
{
get { return age; }
set {
if (value> 0)
{
age = value;
}
else
{
Console.WriteLine("年龄必须大于等于0");
}
}
}
** 封装方法:将变量和对变量的操作封装到一个集合中 ,也就是写类的过程
封装方法的作用:方便被其他类或方法调用
二、继承
定义:以现有的类(父类、基类)作为基础来创建新的类(子类、派生类),子类可以直接使用父类的所有非私有的字段和方法,从而实现代码的复用 ,继承 的关键符号 :(冒号)
例:
class Father
{
public string nose = "大鼻子";
public void Smoking()
{
Console.WriteLine("烟鬼");
}
public Father()
{
Console.WriteLine("我是父类");
}
}
class Son:Father
{
void Get()
{
Console.WriteLine(nose);
Smoking();
Console.WriteLine(base.nose);
base.Smoking();
}
特征:1.子类继承了父类的非私有的属性与方法,构造方法除外
2.子类在创建构造方法时需要调用父类构造方法;
格式:派生类名(总参数列表(父子类的参数)):base(父类参数){}
3. 在创建子类对象时,系统会默认的先调用父类的构造方法,在调用子类的构造方法
4. 子类想使用父类的属性和方法时,需要用到base关键字(base.)
注:当父类有有参的构造函数时,子类在写构造函数必需base调用父类的构造函数
**重写:在继承中,子类根据需要重复定义父类的某个方法,这时父类中的同名方法应有virtual关键字,而子类中的同名方法应有override关键字。
例:
public virtual void Eat()//虚方法
{
Console.WriteLine("吃白萝卜");
}
public override void Eat()//重写方法
{
Console.WriteLine("吃肉");
}
**重写与重载的区别:
1.作用范围不同,重写发生在具有父子关系的两个类中的同名方法,而重载是在同一个类中同名方法。
2.不同点不同,重写的两个方法的返回值与参数相同,方法的声明不同(也就是{ }中的内容不同),重载的方法只要参数列表不同
三、多态
定义:指同一行为具有不同的形式和形态的能力
例:多个人去做同一件事情会得到不同的结果
使用条件:具有继承关系的类之间
多态的形态:
1.向上转换:父类对象调用子类方法
例:Animal a=new Animal();
Dog d=new Dog();
a=d;
2.向下转换:子类对象调用父类方法(编译不报错,但运行会抛异常)
例:d=a;
父类做参数与做返回值案例如下: