淺談C#2.0泛型中的變化:default關(guān)鍵字
今天回答別人問(wèn)題的時(shí)候,才發(fā)現(xiàn)原先的T.default語(yǔ)法被取消了,使用了新的default關(guān)鍵字來(lái)實(shí)現(xiàn)這一功能。還好回復(fù)前動(dòng)手試了一下,不然就...
下面詳細(xì)說(shuō)明一下。之所以會(huì)用到default關(guān)鍵字,是因?yàn)樾枰诓恢李?lèi)型參數(shù)為值類(lèi)型還是引用類(lèi)型的情況下,為對(duì)象實(shí)例賦初值。考慮以下代碼:
class TestDefault<T>
{
public T foo()
{
T t = null; //???
return t;
}
}
如果我們用int型來(lái)綁定泛型參數(shù),那么T就是int型,那么注釋的那一行就變成了 int t = null;顯然這是無(wú)意義的。為了解決這一問(wèn)題,引入了default關(guān)鍵字:
class TestDefault<T>
{
public T foo()
{
return default(T);
}
}
以下是測(cè)試用的代碼,看了之后就應(yīng)該很快能明白,default關(guān)鍵字的作用:
class Program
{
static void Main(string[] args)
{
TestDefault<int> t1 = new TestDefault<int>();
int i = t1.foo();
System.Diagnostics.Debug.Assert(i == 0);
TestDefault<object> t2 = new TestDefault<object>();
object o = t2.foo();
System.Diagnostics.Debug.Assert(o == null);
}
}
最后說(shuō)明一下,在.net 2.0的早期preview中,沒(méi)有default關(guān)鍵字,使用如下的方式實(shí)現(xiàn)default關(guān)鍵字的功能:
class TestDefault<T>
{
public T foo()
{
return T.default;
}
}
這段代碼在vs 2005 beta1中,已經(jīng)不能通過(guò)編譯了。
- 深入C# 4.0 新特性dynamic、可選參數(shù)、命名參數(shù)的詳細(xì)介紹
- C#4.0新特性之協(xié)變與逆變實(shí)例分析
- C#配置文件Section節(jié)點(diǎn)處理總結(jié)
- C# WinForm應(yīng)用程序降低系統(tǒng)內(nèi)存占用方法總結(jié)
- C#字符串的截取函數(shù)用法總結(jié)
- C#中WinForm程序退出方法技巧總結(jié)
- 探秘C# 6.0 的新特性
- C#提高編程能力的50個(gè)要點(diǎn)總結(jié)
- C#使用LINQ查詢(xún)表達(dá)式的基本子句總結(jié)
- C#6.0中10大新特性的應(yīng)用和總結(jié)
相關(guān)文章
C#3.0使用EventLog類(lèi)寫(xiě)Windows事件日志的方法
這篇文章主要介紹了C#3.0使用EventLog類(lèi)寫(xiě)Windows事件日志的方法,以簡(jiǎn)單實(shí)例形式分析了C#寫(xiě)windows事件日志的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C#判斷語(yǔ)句的表達(dá)式樹(shù)實(shí)現(xiàn)
這篇文章介紹了C#判斷語(yǔ)句的表達(dá)式樹(shù)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01淺析C#?AsyncLocal如何實(shí)現(xiàn)Thread間傳值
這篇文章主要是來(lái)和大家一起討論一下C#?AsyncLocal如何實(shí)現(xiàn)Thread間傳值,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01C#操作SQLite數(shù)據(jù)庫(kù)方法小結(jié)(創(chuàng)建,連接,插入,查詢(xún),刪除等)
這篇文章主要介紹了C#操作SQLite數(shù)據(jù)庫(kù)方法,包括針對(duì)SQLite數(shù)據(jù)庫(kù)的創(chuàng)建,連接,插入,查詢(xún),刪除等操作,并提供了一個(gè)SQLite的封裝類(lèi),需要的朋友可以參考下2016-07-07C#調(diào)用FFplay實(shí)現(xiàn)播放視頻功能
這篇文章主要為大家詳細(xì)介紹了C#如何調(diào)用FFplay實(shí)現(xiàn)播放視頻功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10C#?Math中常用數(shù)學(xué)運(yùn)算的示例詳解
Math?為通用數(shù)學(xué)函數(shù)、對(duì)數(shù)函數(shù)、三角函數(shù)等提供常數(shù)和靜態(tài)方法,使用起來(lái)非常方便。這篇文章主要為大家介紹幾個(gè)常用的數(shù)學(xué)運(yùn)算的使用,需要的可以參考一下2022-11-11