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

  • 相关阅读:
    python 线程
    python 进程
    python 异常处理
    python 访问权限
    python 类的继承
    python 常见内置函数setattr、getattr、delattr、setitem、getitem、delitem
    SAPHANA学习(21):SQL Function(U)
    SAPHANA学习(20):SQL Function(T)
    SAPHANA学习(19):SQL Function(S)
    SAPHANA学习(18):SQL Function(R)
  • 原文地址:https://www.cnblogs.com/weihengblogs/p/9258597.html
Copyright © 2011-2022 走看看