为了账号安全,请及时绑定邮箱和手机立即绑定

C#面向对象编程

kong66 全栈工程师
难度入门
时长 3小时17分
学习人数
综合评分9.47
105人评价 查看评价
9.7 内容实用
9.2 简洁易懂
9.5 逻辑清晰
  • 【静态成员】

    作用:将被雷达所有实例共享,所有实例都访问同一个内存地址

    用法:用static声明

    静态成员与实例成员分开保存

    静态成员可以用整个类去访问 Dog.Num += 1;

    【静态函数成员】

    静态函数也是独立的,没有实例也可以调用。

    静态函数不能访问实例成员,只能访问其他静态成员,实例函数可以访问静态


    查看全部
    0 采集 收起 来源:静态成员

    2018-11-13

  • 【接口】

    用interface去声明,只能用来被实现(和抽象类类似,只能被类继承,语法与继承类似)

    作用:指定一组函数成员,而不实现他们的引用类型

    函数默认是public的声明,但是不能加任何声明

    和继承不同的是:一类可以多接口

    https://img1.sycdn.imooc.com//5bea6e1600014eb907060331.jpghttps://img1.sycdn.imooc.com//5bea6f710001598704860298.jpg

    查看全部
    0 采集 收起 来源:接口

    2018-11-13

  • 密闭类与密闭方法

    使用sealed声明,

    声明后,后续继承后不能修改

    如果是基类,不想被修改,用virtual声明即可,如果是字类且用override去修改的,那么就需要同时加上sealed,来声明不可被其派生类修改

    查看全部
    0 采集 收起 来源:密闭类

    2018-11-13

  • 【抽象方法】

    用abstract去定义,必须没有实际函数体,且必须去在派生类中用override去重写

    【抽象类】

    目的就是为了被继承

    有抽象方法的必须用抽象类去标识


    查看全部
  • 【构造函数】

    作用:派生类对象中,包含基类的信息,在执行派生类的构造函数的时候,会先去隐式或显式的,调用基类构造函数。因为是有了基类才有派生类

    调用顺序:引用类的 实例成员初始化>基类>引用类

    【在派生类中直接调用基类构造函数】

    实例:基类   

              基类私有属性 protected string _Name;

              基类定义构造函数public Pet(string name){_Name = name;}

              派生类引用基类构造函数(通过base直接去引用基类构造函数)

              派生类定义构造函数public Dog(string name):base(name){}


      

    查看全部
    0 采集 收起 来源:构造函数

    2018-11-13

  • 可以使用基类去引用指向派生类【如:Pet Dog = new Dog(),可以用宠物类去产生狗类,需要注意的是,调用的方法是引用的方法,即Pet】

    共性:通过统一的容器,我们可以方便去管理。(如:当需要修改货品金额时,可以在容器中进行修改)

    子类差异性:统一的行为中有所区别,也就是个性


    【虚方法】是方法定义

    作用:虚方法,可以使得类既有共性的属性和方法,也可以在运用时,体现出派生类的个性

    用法:声明为“virtual”的。基类的虚方法,可以在派生类中使用override重写

    【多态】是一种过程

    作用:可以通过基类引用,调用虚函数,会指向派生类,调用派生类里面的同名函数,就叫多态

    【数组定义】引用名[] 数组名 = new 类名[]{new 类名(),new 类名()};

                        Pet[] pets = new Pet[]{new Dog(),new Cat()};

    【虚方法的知识点】

    *重写虚方法,必须有相同的可访问性,且基类方法不能是私有的(private)

    *不能重写静态(static)方法或者非虚方法

    *方法、属性、索引器、事件,都可以用虚方法定义(既用virtual或override声明)


    查看全部
    4 采集 收起 来源:虚方法和多态

    2018-11-13

  • 【隐藏方法】

    作用:基类内容不可删除,但是可以在派生类中定义同名内容

    用法:可以在派生类屏蔽基类时,在定义时添加【new关键字】(给编译器声明,同时给编程人员提示)

    示例:基   类 public void PrintName();

              派生类 new public void PrintName();


    查看全部
    0 采集 收起 来源:隐藏方法

    2018-11-13

  • 【继承】

    作用:当不想去重复写代码,可以去继承基类,减少代码编写量,派生类拥有基类的所有属性和方法

    用法:public class 基类名

              public class 派生类名:基类名

    特殊:Object是所有类的默认基类,是唯一的非派生类

    查看全部
    0 采集 收起 来源:继承

    2018-11-13

  • 虚方法:声明为 virtual 的方法就是虚方法,基类(父类)的虚方法可以在派生类(子类)中使用override进行重写

    在使用时,如果已经在派生类中改成了override,那么调用的时候就是用override的了

    查看全部
    0 采集 收起 来源:虚方法和多态

    2018-11-13

  • public class 父类

    {

    }

    继承:public class 子类:父类

    {

    }

    使用时:子类 定义名字=new 子类

    定义名字.   后面的就有父类的属性了

    查看全部
    0 采集 收起 来源:继承

    2018-11-12

  • 继承。子类拥有基类的基础字段属性和函数方法
    查看全部
    0 采集 收起 来源:继承

    2018-11-03

  • 密闭类:sealed

    查看全部
    0 采集 收起 来源:密闭类

    2018-11-01

  • 抽象类:abstract,有抽象方法必须是抽象类

    抽象方法:abstract,不能有方法体

    虚方法:virtual

    重写类:override

    查看全部
  • 1.所有子类都有相同的一个使用字段时,可以将该字段的的赋值交给父类的构造函数,由子类传入即可(因为实例化是是先调用父类构造函数再子类的构造函数)。

    public A(string name){ this.name=name;}  //父类构造函数

    public B(string name):base(name){}  //子类构造函数

    2.不想如1的话,在子类的构造函数后加this就可以使用本子类的构造函数,这样实例化时使用的就是子类构造函数5b72f11c00018fab19201080-156-88.jpg


    查看全部
    0 采集 收起 来源:构造函数

    2018-10-26

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication1
    {
        //public class Pet {
        //    public Pet(string name) {
        //        _name = name;
            
        //    }
        //    protected string _name;
        //    public void PrintName() {

        //        Console.WriteLine("Pet`s name is"+_name);  
        //    }
        //   //虚方法
        //    virtual public void speak() {

        //        Console.WriteLine(_name+"is speaking");
        //    }
        //}
        //结构
        struct fish {
            int weight;
            int price;
        
        }
        //接口
        interface ICatchMice {

            void catchMice();
        }
        interface IClimbTree {

            void climbTree();
        }
       abstract public class Pet
        {
            public Pet(string name)
            {
                _name = name;

            }
            protected string _name;
            public void PrintName()
            {

                Console.WriteLine("Pet`s name is" + _name);
            }
            //抽象类,没有函数体,无法实例化
            abstract public void speak();
            //{

                //Console.WriteLine(_name + "is speaking");
            //}
        }
        //狗类
        public class Dog : Pet { 
            //静态
            static int num;
            static Dog() {
                num = 0;
            
            }
            //构造函数
            public Dog(string name):base(name) {
                //_name = name;
                ++num;
            
            }
            new public void PrintName() {
                Console.WriteLine("我的宠物是"+_name);
            }
            public override void speak()//重写
            {
                Console.WriteLine(_name + " is speaking"+" wow");
            }
            static public void ShowNum() {

                Console.WriteLine("有"+num+"条狗");
            }
        }
        //猫类
        public class Cat : Pet,ICatchMice,IClimbTree {
            //构造函数
            public Cat(string name):base(name) {
                //_name = name;
            
            }
            new public void PrintName() {
                Console.WriteLine("我的宠物是"+_name);
            }
            public override void speak()
            {
                Console.WriteLine(_name + "is speaking"+" meow");
            }
            public void catchMice() {

                Console.WriteLine("catchmice");
            }
            public void climbTree() {
                Console.WriteLine("climbtree");
            }
        
        }
        //静态类,方法扩展
        static class PetGuide{

            static public void HowToFeed(this Dog dog) {
                Console.WriteLine("Play a vedio how to feed dog");
            }
        
        }
        class Program
        { 
            static void Main(string[] args)
            {

                //Dog Dog = new Dog();
                //Dog.Name = "Jack";
                //Dog.PrintName();
                //Dog.speak();
                //Pet Cat = new Cat();
                //Cat.Name = "Tom";
                //Cat.PrintName();
                //Cat.speak();
                Pet[] pets = new Pet[]{new Dog("Jack"),new Cat("Tom")};
                for (int i = 0; i < pets.Length;i++ ) {
                    pets[i].speak();
                 
                }
                Cat c = new Cat("Tom2");
                IClimbTree climb = (IClimbTree)c;
                c.catchMice();
                climb.climbTree();
                Dog a = new Dog("Jack1");
                Dog.ShowNum();

                Dog dog = new Dog("Tommy");
                dog.HowToFeed();



            }
        }
    }

    查看全部
    0 采集 收起 来源:虚方法和多态

    2018-10-26

举报

0/150
提交
取消
课程须知
1、需要掌握c#基础语法和基本概念 2、建议听课和写代码实践相结合,更好的掌握知识点
老师告诉你能学到什么?
1、通过学习继承和多态,构建对象的森林,减少重复代码 2、学习静态成员静态类,实现对象间的共享资源和扩展非派生类 3、学习接口,可以跨类型地实现对象的统一管理 4、学习操作符重载,大大简化我们自定义对象的相关操作 5、学习泛型,极大地降低了开发的工作量

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!