Bootstrap

C# 类的三大特性

 一、封装

        **封装属性:将类的某些信息隐藏在类的内部(用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;

        父类做参数与做返回值案例如下:

 

;