• C# 面向对象的封装、继承、多态


    一、封装:

    封装:把客观的事物封装成类,使用和修改方便;

    作用和结构体使用方法相似,程序执行流程不同;

    要点:成员变量,属性,成员方法,构造函数,成员方法的静态和非静态,命名空间,常用的访问修饰符public公共的、parvate私有的,只有类本身可以访问,internal默认的,同一个命名空间下可以访问、protected被保护的、同一个继承关系下可以访问;

    重名问题:同一个作用域下不允许出现重名问题,最简答解释作用域就是一个花括号内,而每一个循环是不同的花括号的情况下重名是没有关系的;

    1、*****成员变量最基本的“经纪人”

    class student  //新建类

    {

      private string _name; //成员变量 

      public string name  //属性

      {  

      get { return  _name; }  //return的作用就是扔给外面一个值。

                //如果只有get,就只往外输出固定的值;

      set { _name = value; }  //如果执行语句 student.name = "abcde"; 那么这里value的值就是"abcde";

                //value的作用就是从外面赋予成员变量值。

      }

    2、*****成员变量可以有多个“经纪人”,而且数据类型可以不一致

      private bool _sex;

      public bool sex

      {

        get{ return  _sex; }

        set{ _sex  =  value; }

      }

      public string sexabc

      {

      get { return "abcd"+ _sex; }   //如果执行语句 student.name = "abcde"; 那么这里value的值就是"请输入false";

                   //如果执行语句 student.name = "false"; 那么这里value的值就是"abcdfalse";

      set {

        if(value == "false")  

          _sex = value; 

        else

          _sex = "请输入false";  

        }

      }

    3、*****构造函数

    class student 

    {

      public student() {  } //创建构造函数就是执行了这一步;默认不被写出来,但是真实存在;

     }

    student  s  =  new  student();  //这个过程叫实例化的过程;而student()这个方法就是一个构造函数;

    总结:重建对象的过程就是将类实例化的过程;

    实例化的过程就是执行构造函数的过程;

    构造函数是在创建完类之后形成的;

    4、*****成员方法

      private string  _name;

      public  string name

        {

          get { return  _name; }

          set { value  =  _name; }

        }

        public string say()   //新建一个方法

        {

          return "啦啦啦"+_name;

        }

        student  s  =  new  student(); 

        s.name = "abcd";

        string str = s.say();

        Console.Write(s.str);  //输出的是say这个方法返回的值,此时是 啦啦啦abcd;

    总结:在构造函数内可以给private赋值;如果在外面重新赋值那么就会覆盖构造函数内给private赋的值,输出新的,如果没有赋值,那么默认输出构造函数内赋予的值;

    5、*****静态方法

    含有static关键字的就是静态方法;

    实例化的静态无法使用静态的方法;

    静态的方法属于类本身,要用类名点出来;public static int abc(){}  赋值方法是:student.abc(); student就是类名;

    5、*****命名空间或者程序集

    namespace;

    需要引用using 空间名;

    二、继承

    public class fly   //父类,这是个类名;

    {

    }

    public string brid:fly   //子类,类名;可以继承父级的公共用的属性;

    {

    }

    public string little brid:brid   //孙子类,类名;可以继承祖父类、父类的公共用的属性;

    {

    }

    1、 父类、基类;

    2、子类、派生类;

    3、父类可以有无数个后辈类;

    4、一个子类只能有一个父类;

    三、多态

    public class brid     

      {

        public virtual string eat()

          {  return "aaaaa";  }

      }

    public class little brid:brid

    {

      public override string eat()

        { return "abcdefg"; }

    }

    1、方法名一样是可以的,会以重载的方式显示,参数不同;

    2、virtual 虚拟的,override重写,voerload重载;

    3、*****抽象类 / 抽象方法:

    abstract class fly

    {

      public abstract string eat();

    }

    class brid :fly

    {

      public override string eat()

        { return "aaaaaa"; }

    }

    抽象方法必须放在抽象类里;

    抽象类无法被实例化;

    抽象类里如果有抽象方法,所有继承过次抽象类的后辈类,必需要return一个值;

    抽象类不只有抽象方法;

    抽象类只能当做父级使用;

    abstarct 关键字;

    4、*****接口

    interface fly

    {

      string flying();

    }

    关键字interface;

    接口不能有实质性的方法;

    无法被实例化;

    不需要访问修饰符,默认public;

    只能被继承;

    所有接口方法必须全部被继承实现;否则报错;

  • 相关阅读:
    Nexus centos 安装
    Linux下Redis的安装和部署
    Markdown编辑器
    mysql 递归查询 主要是对于层级关系的查询
    Maven 打包的时候报 Failed to execute goal org.codehaus.mojo:native2ascii-maven-plugin
    WPS 认证机制
    网络延迟分析
    帧传送、关联与身份验证状态
    802协议族
    【转】Hostapd工作流程分析
  • 原文地址:https://www.cnblogs.com/xinchenhui/p/7820386.html
Copyright © 2020-2023  润新知