C#中this与base的区别

11 篇文章 0 订阅

【意义】

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

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值