將從下面4個(gè)方面進(jìn)行比較:
1.靜態(tài)成員
<ul>
<li>靜態(tài)成員屬于類所有,非靜態(tài)成員屬于類的實(shí)例所有。</li>
<li>每創(chuàng)建一個(gè)類的實(shí)例,都會(huì)在內(nèi)存中為非靜態(tài)成員新分配一塊存儲(chǔ);靜態(tài)成員屬于類所有,為各個(gè)類的實(shí)例所公用,無(wú)論類創(chuàng)建了多少實(shí)例;類的靜態(tài)成員在內(nèi)存中只占同一塊區(qū)域。</li>
</ul>
2.靜態(tài)方法
<ul>
<li>靜態(tài)方法屬于類所有,類實(shí)例化前即可使用。</li>
<li>非靜態(tài)方法可以訪問(wèn)類中的任何成員,靜態(tài)方法只能訪問(wèn)類中的靜態(tài)成員。</li>
<li>因?yàn)殪o態(tài)方法在類實(shí)例化前就可以使用,而類中的非靜態(tài)變量必須在實(shí)例化之后才能分配內(nèi)存,導(dǎo)致C#中靜態(tài)方法調(diào)用時(shí)無(wú)法判斷非靜態(tài)變量使用的內(nèi)存地址,故無(wú)法使用。而靜態(tài)變量的地址對(duì)類來(lái)說(shuō)是固定的,故可以使用。</li>
</ul>
3.靜態(tài)方法是一種特殊的成員方法
<ul>
<li>static方法是類中的一個(gè)成員方法,屬于整個(gè)類,即不用創(chuàng)建任何對(duì)象也可以直接調(diào)用。</li>
<li>靜態(tài)方法效率上要比實(shí)例化高,靜態(tài)方法的缺點(diǎn)是不自動(dòng)進(jìn)行銷毀,而實(shí)例化的則可以做銷毀。</li>
<li>靜態(tài)方法和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存,而使用實(shí)例的方式會(huì)創(chuàng)建多個(gè)內(nèi)存。</li>
<li>C#中的方法有兩種:實(shí)例方法,靜態(tài)方法。</li>
</ul>
4.靜態(tài)方法中獲取類的名稱
靜態(tài)方法中用:
static void Main(string[] args)
{
string className = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;
Console.WriteLine(className);
}
非靜態(tài)方法中還可以用:
string GetClassName()
{
return this.GetType().FullName;
}