1. 程式人生 > >C#中base關鍵字的幾種用法

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

body action 調用 ace using value tel 實例化 library

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();
    }
}
技術分享圖片 #1樓 2017-08-27 15:56 cyanmsg 例2.1 僅僅會輸出 "Build B" 支持(0)反對(0) http://pic.cnblogs.com/face/1193530/20181227150419.png 回復引用 #2樓40995942018/10/26 22:16:15 2018-10-26 22:16 安迪巴 第一個哪怕不加:base()也會兩個都輸出的好嗎
實例化子類對像時,本身就會先調用父類默認構造函數,在調用子類構造函數

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