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


轉:https://blog.csdn.net/cplvfx/article/details/82982862

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();
    }
}

運行結果:

Build A

Build B

2.2關於base在派生類中調用基類的方法。

    public class A
    {
        public virtual void Hello()
        {
            Console.WriteLine("Hello");
        }
    }
    public class B : A
    {
        public override void Hello()
        {
            base.Hello();//調用基類的方法,顯示Hello
            Console.WriteLine("World");
        }
    }

運行結果:

Hello

World

下面是我自己改進了一下上面的例子:

    public class A
    {
        public virtual void Hello()
        {
            Console.WriteLine("Hello");
        }
    }
    public class B : A
    {
        public static void Main ()
        {
            B b = new B();
            b.Hello2();
            b.Hello();
        }

        public override void  Hello()
        {
            base.Hello();//調用基類的方法,顯示Hello
            Console.WriteLine("World");
        }
        public void Hello2()
        {
            base.Hello();//調用基類的方法,顯示Hello
        }
    }

運行結果:

Hello

Hello

World

關於Base:

base 關鍵字用於從派生類中訪問基類的成員:
調用基類上已被其他方法重寫的方法。
指定創建派生類實例時應調用的基類構造函數。
基類訪問只能在構造函數、實例方法或實例屬性訪問器中進行。

1. 在派生類中調用基類方法。

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._className);
        //調用基類方法
       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

Class Name: BaseClass

This DerivedClass is DerivedClass

2.在派生類中調用基類構造函數

    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();
        }
    }

運行結果:

in BaseClass()
in BaseClass(int 1)

注意:
從靜態方法中使用 base 關鍵字是錯誤的。
base 主要用於面向對象開發的對態這方面,在示例2中有體現。

-----------------------------------------------------------------------------我是一條帥氣的分割線-------------------------------------------------------------帥氣--------------------------------------------------------------------------------------------------------------的--------------------------------分------------割--------------線--------------------------

關於this

this 關鍵字引用類的當前實例。
以下是 this 的常用用途:
限定被相似的名稱隱藏的成員
將對象作為參數傳遞到其他方法
聲明索引器

    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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM