C#基本語法:Base症結字進修筆記。本站提示廣大學習愛好者:(C#基本語法:Base症結字進修筆記)文章只能為提供參考,不一定能成為您想要的結果。以下是C#基本語法:Base症結字進修筆記正文
它與this症結字一樣,都是作為類的實例(是以不克不及挪用基類的靜態成員和籠統成員)簡寫或許替換而存在的,只不外this症結字用於替換本類的實例,base症結字用於替換基類的實例,用法很簡略,其拜訪基類的情勢以下:
base.【標識符】
base[【表達式列表】] 這個類型的一看即可以年夜概猜想多用於基類實例的索引器操作,在我上面演示的代碼中你會看到它的用法。
關於 base.【標識符】的拜訪情勢再次解釋一下:
關於非虛辦法,這類拜訪僅僅是對基類實例成員的直接拜訪,完整等價於((base)this).【標識符】。
關於虛辦法,關於這類訪子類重寫該虛辦法應用這類拜訪情勢也是(禁用了虛辦法挪用的機制)對基類實例成員的直接拜訪,將其看作非虛辦法處置,此時則不等價於((base)this).【標識符】,由於這類格局完整遵照虛辦法挪用的機制,其聲明試時為積聚類型,運轉時為子類類型,所以履行的照樣子類的重寫辦法。於未重寫的虛辦法同等於簡略的非虛辦法處置。
測試代碼以下:
using System; namespace BaseTest { class father { string str1 = "this field[1] of baseclass", str2 = "this field[2] of baseclass"; public void F1() //Non-virtual method { Console.WriteLine(" F1 of the baseclass"); } public virtual void F2()//virtual method { Console.WriteLine(" F2 of the baseclass"); } public virtual void F3() { Console.WriteLine(" F3 of the baseclass that is not overrided "); } public string this[int index] { set { if (index==1 ) { str1 = value; } else { str2 = value; } } get { if (index ==1) { return str1; } else { return str2; } } } } class Child:father { public void G() { Console.WriteLine("======Non-virtual methods Test ========="); base.F1(); ((father)this).F1(); Console.WriteLine("======virtual methods Test========="); base.F2(); ((father)this).F2(); base.F3(); ((father)this).F3(); Console.WriteLine("=====Test the type that the tbase [[expression]] =========="); Console.WriteLine(base[1]); base[1] = "override the default "; Console.WriteLine(base[1]); Console.WriteLine("================Test Over====================="); } public override void F2() { Console.WriteLine(" F2 of the subclass "); } static void Main(string[] args) { Child child=new Child(); child.G(); Console.ReadKey(); } } }
base用於結構函數聲明,用法和this用於結構函數聲明完整分歧,但base是對基類結構函數形參的婚配。
using System; namespace BaseCoTest { class Base { public Base(int a, string str) { Console.WriteLine("Base. Base(int a,string str)"); } public Base(int a) { Console.WriteLine("Base. Base(int a)"); } public Base() { } } class Sub : Base { public Sub() { } public Sub(int a) : base(1, "123") { Console.WriteLine("Sub .Sub(int a)"); } class Test { public static void Main() { Sub sub = new Sub(1); Console.ReadKey(); } } } }