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访问的都是类的实例,也就是对象,而静态成员只能由类访问,不能由对象访问,所以静态方法中不能调用类成员字段。

  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/weihengblogs/p/9258597.html
Copyright © 2011-2022 走看看