生活随笔
收集整理的這篇文章主要介紹了
20. C# -- Base, this 关键字
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Base關(guān)鍵字用途
用于從派生類中訪問基類的成員,調(diào)用基類上已被其他方法重寫的方法。
指定創(chuàng)建派生類實時應(yīng)調(diào)用的基類構(gòu)造函數(shù)。
基類訪問只能在構(gòu)造函數(shù),實例方法或?qū)嵗龑傩栽L問器中進(jìn)行。
從靜態(tài)方法中使用 base 關(guān)鍵字是錯誤的。
Base 主要用于面向?qū)ο箝_發(fā)的對態(tài)這方面。
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Threading.Tasks;
namespace?ConsoleApplication1
{class?Program
{//base的用法//1.?訪問基類成員,訪問基類方法public?class?BaseClass
{protected?string?_calssName?=?"BaseClass";public?virtual?void?PrintName()
{Console.WriteLine("The?BaseClass?Name?is?:?{0}",?_calssName);????????????????????
}
}class?DerivedClass?:?BaseClass
{public?string?_className?=?"DerivedClass";public?override?void?PrintName()
{//Console.WriteLine("The?BaseClass?Name?is?{0}");//調(diào)用基類方法base.PrintName();Console.WriteLine("This?DerivedClass?is?{0}",_className);
}
}//2.?在派生類中調(diào)用基類構(gòu)造函數(shù)public?class?BaseClass2
{int?num;public?BaseClass2()
{Console.WriteLine("in?BaseClass2()");
}public?BaseClass2(int?i)
{num?=?i;Console.WriteLine("in?BaseClass2({0})",num);
}
}public?class?DerivedClass2?:?BaseClass2
{//?該構(gòu)造器調(diào)用?BaseClass2.BaseClass2()?public?DerivedClass2():?base()
{?}//?該構(gòu)造器調(diào)用?BaseClass2.BaseClass2(int?i)?public?DerivedClass2(int?i):?base(i)
{?}
}static?void?Main(string?[]?args)
{//訪問基類成員,訪問基類方法???DerivedClass?dc?=?new?DerivedClass();dc.PrintName();//在派生類中調(diào)用基類構(gòu)造函數(shù)DerivedClass2??dc2?=?new?DerivedClass2();DerivedClass2?dc2_b?=?new?DerivedClass2(2);Console.ReadLine();
}
}
}
控制臺輸出:
The BaseClass Name is BaseClass
This DerivedClass is DerivedClass
in BaseClass2()
in BaseClass2(1)
this的常用用途:
限定被相似的名稱隱藏的成員
將對象作為參數(shù)傳遞到其他方法
聲明索引器, 索引器允許類或結(jié)構(gòu)的實例按照與數(shù)組相同的方式進(jìn)行索引。索引器類似于屬性,不同之處在于它們的訪問器采用參數(shù)。
由于靜態(tài)成員函數(shù)存在于類一級,并且不是對象的一部分,因此沒有 this 指針。在靜態(tài)方法中引用 this 是錯誤的。
this 關(guān)鍵字引用類的當(dāng)前實例。
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Threading.Tasks;
namespace?ConsoleApplication1
{class?Program
{//this的用法//static?void?Main(string?[]?args)//{//????Console.ReadLine();//}
}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對象作為參數(shù)傳遞到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(string?[]?args)
{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
通用規(guī)則:
1、盡量少用或者不用base和this。除了避開子類的名稱沖突和在一個構(gòu)造函數(shù)中調(diào)用其他的構(gòu)造函數(shù)之外,base和this的使用容易引起不必要的結(jié)果。
2、在靜態(tài)成員中使用base和this都是不允許的。原因是,base和this訪問的都是類的實例,也就是對象,而靜態(tài)成員只能由類來訪問,不能由對象來訪問。
3、base是為了實現(xiàn)多態(tài)而設(shè)計的。
4、使用this或base關(guān)鍵字只能指定一個構(gòu)造函數(shù),也就是說不可同時將this和base作用在一個構(gòu)造函數(shù)上。
5、簡單的來說,base用于在派生類中訪問重寫的基類成員;而this用于訪問本類的成員,當(dāng)然也包括繼承而來公有和保護(hù)成員。
6、除了base,訪問基類成員的另外一種方式是:顯示的類型轉(zhuǎn)換來實現(xiàn)。只是該方法不能為靜態(tài)方法。
參考:
http://dev.yesky.com/380/7670880_2.shtml
http://www.cnblogs.com/netlyf/archive/2009/09/13/1565709.html? ?
轉(zhuǎn)載于:https://blog.51cto.com/57388/1651664
總結(jié)
以上是生活随笔為你收集整理的20. C# -- Base, this 关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。