立博名家

C# 参考之访问关键字:base、this

base

base 关键字用于从派生类中访问基类的成员:

  1. 调用基类上已被其他方法重写的方法。
  2. 指定创建派生类实例时应调用的基类构造函数。

基类访问只能在构造函数、实例方法或实例属性访问器中进行。

示例:

  1. 在派生类中调用基类方法。
    • // base 关键字
      // 访问基类成员
      using System;

      public class BaseClass
      {
          protected string _className = "BaseClass";

          public virtual void PrintName()
          {
              Console.WriteLine("Class Name: {0}", _className);
          }
      }

      class DerivedClass : BaseClass
      {
          public string _className = "DerivedClass";

          public override void PrintName()
          {
              Console.Write("The BaseClass Name is {0}");
              //调用基类方法
              base.PrintName();
              Console.WriteLine("This DerivedClass is {0}", _className);
          }
      }

      class TestApp
      {
          public static void Main()
          {
              DerivedClass dc = new DerivedClass();
              dc.PrintName();
          }
      }

      /**//*
      控制台输出:
      The BaseClass Name is BaseClass
      This DerivedClass is DerivedClass
      */
  2. 在派生类中调用基类构造函数。
    • // keywords_base2.cs
      using System;
      public class BaseClass
      {
          int num;

          public BaseClass()
          {
              Console.WriteLine("in BaseClass()");
          }

          public BaseClass(int i)
          {
              num = i;
              Console.WriteLine("in BaseClass(int {0})", num);
          }
      }

      public class DerivedClass : BaseClass
      {
          // 该构造器调用 BaseClass.BaseClass()
          public DerivedClass() : base()
          {
          }

          // 该构造器调用 BaseClass.BaseClass(int i)
          public DerivedClass(int i) : base(i)
          {
          }

          static void Main()
          {
              DerivedClass dc = new DerivedClass();
              DerivedClass dc1 = new DerivedClass(1);
          }
      }

      /**//*
      控制台输出:
      in BaseClass()
      in BaseClass(1)
      */

注意点

  1. 从静态方法中使用 base 关键字是错误的。
  2. base 主要用于面向对象开发的对态这方面,在示例2中有体现。

this

this 关键字引用类的当前实例。

以下是 this 的常用用途:

  1. 限定被相似的名称隐藏的成员
  2. 将对象作为参数传递到其他方法
  3. 声明索引器

示例:

  1.   综合示例。
    • // this 关键字
      // keywords_this.cs
      using System;
      class Employee
      {
          private string _name;
          private int _age;
          private string[] _arr = new string[5];

          public Employee(string name, int age)
          {
              // 使用this限定字段,name与age
              this._name = name;
              this._age = age;
          }

          public string Name
          {
              get { return this._name; }
          }

          public int Age
          {
              get { return this._age; }
          }

          // 打印雇员资料
          public void PrintEmployee()
          {
              // 将Employee对象作为参数传递到DoPrint方法
              Print.DoPrint(this);
          }

          // 声明索引器
          public string this[int param]
          {
              get { return _arr[param]; }
              set { _arr[param] = value; }
          }

      }
      class Print
      {
          public static void DoPrint(Employee e)
          {
              Console.WriteLine("Name: {0}\nAge: {1}", e.Name, e.Age);
          }
      }

      class TestApp
      {
          static void Main()
          {
              Employee E = new Employee("Hunts", 21);
              E[0] = "Scott";
              E[1] = "Leigh";
              E[4] = "Kiwis";
              E.PrintEmployee();

              for(int i=0; i<5; i++)
              {
                  Console.WriteLine("Friends Name: {0}", E[i]);
              }

              Console.ReadLine();
          }
      }

      /**//*
      控制台输出:
      Name: Hunts
      Age: 21
      Friends Name: Scott
      Friends Name: Leigh
      Friends Name: 
      Friends Name: 
      Friends Name: Kiwis
      */

注意点

  1. 由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。在静态方法中引用 this 是错误的。
  2. 索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。

posted on 2007-05-08 11:10  大李  阅读(222)  评论(0)    收藏  举报

导航

立博名家