C# Foundation---keyword: base & this

  1 using  System;
  2 using  System.Collections.Generic;
  3 using  System.Text;
  4
  5 namespace  CSharpFoundationStudy
  6 {
  7    /**//*
  8     * From:http://www.cnblogs.com/anytao  [你必须知道的.NET] 第六回:深入浅出关键字---base和this
  9     * 关键字:base 与 this
 10     * base和this在C#中被归于访问关键字,顾名思义,就是用于实现继承机制的访问操作,来满足对对象成员的访问,从而为多态机制提供更加灵活的处理方式
 11     * 
 12     * base 关键字
 13     * 其用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数、实例方法和实例属性访问器中,MSDN中小结的具体功能包括:
 14     *     调用基类上已被其他方法重写的方法。
 15     *     指定创建派生类实例时应调用的基类构造函数。
 16     * this 关键字
 17     * 其用于引用类的当前实例,也包括继承而来的方法,通常可以隐藏this,MSDN中的小结功能主要包括:
 18     *     限定被相似的名称隐藏的成员
 19     *     将对象作为参数传递到其他方法
 20     *     声明索引器
 21     */

 22    public class Action
 23    {
 24        public static void ToRun(Vehicle vehicle)
 25        {
 26            Console.WriteLine("{0} is Running", vehicle.ToString());
 27        }

 28    }

 29
 30    public class Vehicle
 31    {
 32        private string name;
 33        private int speed;
 34        private string[] array = new string[10];
 35
 36        public Vehicle()
 37        {
 38        }

 39
 40        public Vehicle(string name, int speed)
 41        {
 42            //限定被相似的名称隐藏的成员
 43            this.name = name;
 44            this.speed = speed;
 45        }

 46
 47        public virtual void ShowResult()
 48        {
 49            Console.WriteLine("The top speed of {0} is {1}", name, speed);
 50        }

 51
 52        public void Run()
 53        {
 54            //传递当前实例
 55            Action.ToRun(this);
 56        }

 57
 58        //声明索引器,必须为this,这样就可以像数组一样来索引对象
 59        public string this[int index]
 60        {
 61            get
 62            {
 63                return array[index];
 64            }

 65            set
 66            {
 67                array[index] = value;
 68            }

 69        }

 70    }

 71
 72    public class Car : Vehicle
 73    {
 74        //派生类和基类通信,以base实现,基类首先被调用
 75        public Car(string name, int speed)
 76            : base(name, speed)
 77        {
 78        }

 79
 80        public Car()
 81            : base("Car"200)
 82        {
 83        }

 84
 85        public override void ShowResult()
 86        {
 87            base.ShowResult();
 88            Console.WriteLine("Override Base Function in Car");
 89        }

 90    }

 91
 92    public class Audi : Car
 93    {
 94        public Audi()
 95            : base("Audi"300)
 96        { }
 97
 98        public Audi(string name, int speed)
 99            : base(name,speed)
100        {
101        }

102
103        public override void ShowResult()
104        {
105            //由三层继承可以看出,base只能继承其直接基类成员
106            base.ShowResult();
107            //base可以访问基类的公有成员和受保护成员,私有成员是不可访问的
108            base.Run();
109            Console.WriteLine("It's audi's result.");
110        }

111    }

112
113    /**//*
114     * base常用于,在派生类对象初始化时和基类进行通信。
115     * base可以访问基类的公有成员和受保护成员,私有成员是不可访问的。
116     * this指代类对象本身,用于访问本类的所有常量、字段、属性和方法成员,而且不管访问元素是任何访问级别。因为,this仅仅局限于对象内部,对象外部是无法看到的,这就是this的基本思想。另外,静态成员不是对象的一部分,因此不能在静态方法中引用this。
117     * 在多层继承中,base可以指向的父类的方法有两种情况:一是有重载存在的情况下,base将指向直接继承的父类成员的方法,例如Audi类中的 ShowResult方法中,使用base访问的将是Car.ShowResult()方法,而不能访问Vehicle.ShowResult()方法;而是没有重载存在的情况下,base可以指向任何上级父类的公有或者受保护方法,例如Audi类中,可以使用base访问基类Vehicle.Run() 方法。
118     */

119
120    public class BaseThisTest
121    {
122        public static void Main()
123        {
124            Audi audi = new Audi("Audi"500);
125            audi[0= "A6";
126            audi[1= "A8";
127
128            audi.Run();
129            audi.ShowResult();
130            Console.ReadLine();
131        }

132    }

133}

134

转载于:https://www.cnblogs.com/simply-zhao/archive/2008/01/20/1046447.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值