base

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

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

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

示例:

  1. 在派生类中调用基类方法。
    • C# 参考之访问关键字:base、this
    





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





		
 
      // 访问基类成员
      C# 参考之访问关键字:base、this
    





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





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





		
 
      public class BaseClass
          protected string _className = "BaseClass";
      C# 参考之访问关键字:base、this
    





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





		
     
      public virtual void PrintName()
          
              Console.WriteLine("Class Name: {0}", _className);
      C# 参考之访问关键字:base、this
    





		
     }

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





		
 }

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





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





		
 
      class DerivedClass : BaseClass
          public string _className = "DerivedClass";
      C# 参考之访问关键字:base、this
    





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





		
     
      public override void PrintName()
          
              //调用基类方法
      C# 参考之访问关键字:base、this
    





		
 
              base.PrintName();
      C# 参考之访问关键字:base、this
    





		
         Console.WriteLine(
      "This DerivedClass is {0}", _className);
      C# 参考之访问关键字:base、this
    





		
     }

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





		
 }

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





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





		
 
      class TestApp
          public static void Main()
          
              DerivedClass dc = new DerivedClass();
      C# 参考之访问关键字:base、this
    





		
         dc.PrintName();
      C# 参考之访问关键字:base、this
    





		
     }

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





		
 }

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





		
 
      控制台输出:
      C# 参考之访问关键字:base、this
    





		
 The BaseClass Name is BaseClass
      C# 参考之访问关键字:base、this
    





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





		
 
      */
  2. 在派生类中调用基类构造函数。
    • C# 参考之访问关键字:base、this
    





		
 // keywords_base2.cs
      C# 参考之访问关键字:base、this
    





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





		
 
      public class BaseClass
          int num;
      C# 参考之访问关键字:base、this
    





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





		
     
      public BaseClass()
          
              Console.WriteLine("in BaseClass()");
      C# 参考之访问关键字:base、this
    





		
     }

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





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





		
     
      public BaseClass(int i)
          
              num = i;
      C# 参考之访问关键字:base、this
    





		
         Console.WriteLine(
      "in BaseClass(int {0})", num);
      C# 参考之访问关键字:base、this
    





		
     }

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





		
 }

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





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





		
 
      public class DerivedClass : BaseClass
          // 该构造器调用 BaseClass.BaseClass()
      C# 参考之访问关键字:base、this
    





		
 
          public DerivedClass() : base()
          
          }
      C# 参考之访问关键字:base、this
    





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





		
     
      // 该构造器调用 BaseClass.BaseClass(int i)
      C# 参考之访问关键字:base、this
    





		
 
          public DerivedClass(int i) : base(i)
          
          }
      C# 参考之访问关键字:base、this
    





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





		
     
      static void Main()
          
              DerivedClass dc = new DerivedClass();
      C# 参考之访问关键字:base、this
    





		
         DerivedClass dc1 
      = new DerivedClass(1);
      C# 参考之访问关键字:base、this
    





		
     }

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





		
 }

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





		
 
      控制台输出:
      C# 参考之访问关键字:base、this
    





		
 in BaseClass()
      C# 参考之访问关键字:base、this
    





		
 in BaseClass(1)
      C# 参考之访问关键字:base、this
    





		
 
      */

 

注意点

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

this

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

以下是 this 的常用用途:

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

示例:

  1.  综合示例。
    • C# 参考之访问关键字:base、this
    





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





		
 
      // keywords_this.cs
      C# 参考之访问关键字:base、this
    





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





		
 
      class Employee
          private string _name;
      C# 参考之访问关键字:base、this
    





		
     
      private int _age;
      C# 参考之访问关键字:base、this
    





		
     
      private string[] _arr = new string[5];
      C# 参考之访问关键字:base、this
    





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





		
     
      public Employee(string name, int age)
          
              // 使用this限定字段,name与age
      C# 参考之访问关键字:base、this
    





		
 
              this._name = name;
      C# 参考之访问关键字:base、this
    





		
         
      this._age = age;
      C# 参考之访问关键字:base、this
    





		
     }

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





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





		
     
      public string Name
          
              get     }
      C# 参考之访问关键字:base、this
    





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





		
     
      public int Age
          
              get     }
      C# 参考之访问关键字:base、this
    





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





		
     
      // 打印雇员资料
      C# 参考之访问关键字:base、this
    





		
 
          public void PrintEmployee()
          
              // 将Employee对象作为参数传递到DoPrint方法
      C# 参考之访问关键字:base、this
    





		
 
              Print.DoPrint(this);
      C# 参考之访问关键字:base、this
    





		
     }

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





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





		
     
      // 声明索引器
      C# 参考之访问关键字:base、this
    





		
 
          public string this[int param]
          
              get         set     }
      C# 参考之访问关键字:base、this
    





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





		
 }

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





		
 
      class Print
          public static void DoPrint(Employee e)
          
              Console.WriteLine("Name: {0}\nAge: {1}", e.Name, e.Age);
      C# 参考之访问关键字:base、this
    





		
     }

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





		
 }

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





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





		
 
      class TestApp
          static void Main()
          
              Employee E = new Employee("Hunts"21);
      C# 参考之访问关键字:base、this
    





		
         E[
      0= "Scott";
      C# 参考之访问关键字:base、this
    





		
         E[
      1= "Leigh";
      C# 参考之访问关键字:base、this
    





		
         E[
      4= "Kiwis";
      C# 参考之访问关键字:base、this
    





		
         E.PrintEmployee();
      C# 参考之访问关键字:base、this
    





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





		
         
      for(int i=0; i<5; i++)
              
                  Console.WriteLine("Friends Name: {0}", E[i]);
      C# 参考之访问关键字:base、this
    





		
         }

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





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





		
         Console.ReadLine();
      C# 参考之访问关键字:base、this
    





		
     }

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





		
 }

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





		
 
      控制台输出:
      C# 参考之访问关键字:base、this
    





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





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





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





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





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





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





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





		
 
      */

注意点

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

相关文章: