【轉】C#中base關鍵字的幾種用法

eedc發表於2017-01-23
base其實最大的使用地方在面相對性開發的多型性上,base可以完成建立派生類例項時呼叫其基類建構函式或者呼叫基類上已被其他方法重寫的方法。
例如:

2.1關於base呼叫基類建構函式
public class A
{
        public A()
        {
                Console.WriteLine("Build A");
        }
}
public class B:A
{
        public B():base()
        {
                Console.WriteLine("Build B");
        }
        static void Main()
        {
                B b = new B();
                Console.ReadLine();
        }
}
建立一個B的例項物件,獲得結果是同時列印Build A和Build B.

2.2關於base在派生類中呼叫基類的方法。
public class A
{
        public virtual void Hello()
        {
                Console.WiriteLine("Hello");
        }
}
public class B : A
{
        public override void Hello()
        {               
                base.Hello();//呼叫基類的方法,顯示Hello
                Console.WiriteLine("World");
        }
}
這樣如果程式呼叫B.Hello()獲得的效果將會使Hello World.

最後補充下,根據MSDN Library介紹來看這兩個關鍵字都是屬於[訪問關鍵字]型別
 
+++++++++++++++++++++++++++++ 無敵分割線 +++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++ 文章二 +++++++++++++++++++++++++++++
 
關於base
base 關鍵字用於從派生類中訪問基類的成員:
呼叫基類上已被其他方法重寫的方法。
指定建立派生類例項時應呼叫的基類建構函式。
基類訪問只能在建構函式、例項方法或例項屬性訪問器中進行。

示例:
1. 在派生類中呼叫基類方法。
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();
    }
}

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)();
        Console.ReadLine();
    }
}
注意:
從靜態方法中使用 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();
    }
}

 

相關文章