zoukankan      html  css  js  c++  java
  • base和this的用法

    【意义】

    this:指当前类,this调用当前类的属性,方法,包括构造函数的方法,继承本类的构造函数

    base:指当前类的父类,可调用父类的非私有属性,方法,继承父类的构造函数括号里的参数

    【用处】

    一:this的用处

    1.限定被相似的名称隐藏的成员,方法或函数(多数用在构造函数中)

    class Person
    {
    private string name;
    public Person(string name)
    {
    this.name = name;
    }
    }

    由于this.name中的name和入参name的名称一样,即被入参隐藏了,所以要用this限定name是本类的属性
    2.将自己this对象作为参数传递给其它方法 

    class Teacher
    {
    public void tshow()
    {
    Console.WriteLine("我是老师!");
    Console.WriteLine(this);//显示的是本类的类名
    }
    }

    3.声明索引器

    private int _index;
    public int this[int index]
    {
    get { return _index; }
    set { _index = index; }
    }

    二:base的用处(base实现了多态)
    1.在子类中通过base调用父类的构造函数,即在子类初始化时和父类进行通信。

    class Program
    {
    static void Main(string[] args)
    {
    Person p = new Person("小李");
    p.show();
    Teacher t = new Teacher("小刘",18);
    t.tshow();
    
    Console.Read();
    }
    }
    class Person
    {
    protected string name;
    public Person(string name)
    {
    this.name = name;
    }
    public void show()
    {
    Console.WriteLine("我属于人类!");
    }
    }
    class Teacher:Person
    {
    
    public Teacher(string name,int age)
    : base(name)
    {
    this.Age = age;
    }
    private int _age;
    public int Age
    {
    get { return _age; } //
    set { _age = value; } //
    }
    public void tshow()
    {
    Console.WriteLine("我是学生{0}{1}!",name,Age); 
    } 
    }


    2.调用基类上已被其它方法重写的方法

    class Program
    {
    static void Main(string[] args)
    {
    Person p = new Person();
    p.show();
    Teacher t = new Teacher();
    t.show();
    Console.Read();
    }
    }
    class Person
    {
    public virtual void show()
    {
    Console.WriteLine("我属于人类");
    }
    }
    class Teacher:Person
    {
    public override void show()
    {
    base.show();
    Console.WriteLine("我是老师");
    }
    }
    3.调用基类的构造函数
    class Program
    {
    static void Main(string[] args)
    {
    Person p = new Person();
    p.show();
    Teacher t = new Teacher();
    t.tshow();
    Console.Read();
    }
    }
    
    class Person
    {
    public void show()
    {
    Console.WriteLine("我属于人类");
    }
    }
    class Teacher:Person
    {
    public void tshow()
    {
    base.show();
    Console.WriteLine("我是老师");
    }
    }

    【注】

    在多层继承中:

    1>有重载,base指向直接继承的父类

    2>无重载,base可指向任意上级父类

    【总结】
                 不能在静态方法中引用this和base,因为当类第一次被加载的时候,静态成员已经被加载到静态存储区,此时类的对象还有可能能没有创建,而this和base访问的都是类的实例,也就是对象,而静态成员只能由类访问,不能由对象访问,所以静态方法中不能调用类成员字段。

  • 相关阅读:
    【转载】浮点数在内存中的存储格式
    流媒体完全手册
    Windows Mobile 5.0 SDK 下载地址
    实时传输协议 RTP
    JDK环境变量配置
    扩展Windows Mobile模拟器存储空间的方法
    WinSock学习笔记
    实时传输协议 RTCP
    NHibernate从入门到精通系列(4)——持久对象的生命周期(上)
    实时流协议 RTSP
  • 原文地址:https://www.cnblogs.com/weihengblogs/p/9258597.html
Copyright © 2011-2022 走看看