打印本文 打印本文  关闭窗口 关闭窗口  
C#中的关键字之:base、this
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 13:56:46  文章录入:杜斌  责任编辑:杜斌

  C# 中的关键字之:base、this。base 关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法。

  指定创建派生类实例时应调用的基类构造函数。

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

  示例:

  在派生类中调用基类方法。

以下是引用片段:
  // 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

  */

  在派生类中调用基类构造函数。

以下是引用片段:
  // 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)

  */

  注意点:

  从静态方法中使用 base 关键字是错误的。

  base 主要用于面向对象开发的对态这方面,在示例2中有体现。

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

  以下是 this 的常用用途:

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

  示例:

  综合示例。

以下是引用片段:
  // 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

  */

  注意点:

  由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。在静态方法中引用 this 是错误的。

  索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。

打印本文 打印本文  关闭窗口 关闭窗口