科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道C# 参考之访问关键字:base、this

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法。 指定创建派生类实例时应调用的基类构造函数。

作者:中国IT实验室 来源:中国IT实验室 2007年9月8日

关键字: this BASE C#

  • 评论
  • 分享微博
  • 分享邮件
 base
  
  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 关键字引用类的当前实例。
  
  以下是 this 的常用用途:
  
  限定被相似的名称隐藏的成员
  将对象作为参数传递到其他方法
  声明索引器
  示例:
  
   综合示例。
  // 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 是错误的。
  索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章