淺談C#2.0泛型中的變化:default關(guān)鍵字
今天回答別人問題的時候,才發(fā)現(xiàn)原先的T.default語法被取消了,使用了新的default關(guān)鍵字來實現(xiàn)這一功能。還好回復(fù)前動手試了一下,不然就...
下面詳細(xì)說明一下。之所以會用到default關(guān)鍵字,是因為需要在不知道類型參數(shù)為值類型還是引用類型的情況下,為對象實例賦初值??紤]以下代碼:
class TestDefault<T>
{
public T foo()
{
T t = null; //???
return t;
}
}
如果我們用int型來綁定泛型參數(shù),那么T就是int型,那么注釋的那一行就變成了 int t = null;顯然這是無意義的。為了解決這一問題,引入了default關(guān)鍵字:
class TestDefault<T>
{
public T foo()
{
return default(T);
}
}
以下是測試用的代碼,看了之后就應(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);
}
}
最后說明一下,在.net 2.0的早期preview中,沒有default關(guān)鍵字,使用如下的方式實現(xiàn)default關(guān)鍵字的功能:
class TestDefault<T>
{
public T foo()
{
return T.default;
}
}
這段代碼在vs 2005 beta1中,已經(jīng)不能通過編譯了。
相關(guān)文章
C#3.0使用EventLog類寫Windows事件日志的方法
這篇文章主要介紹了C#3.0使用EventLog類寫Windows事件日志的方法,以簡單實例形式分析了C#寫windows事件日志的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08淺析C#?AsyncLocal如何實現(xiàn)Thread間傳值
這篇文章主要是來和大家一起討論一下C#?AsyncLocal如何實現(xiàn)Thread間傳值,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01C#操作SQLite數(shù)據(jù)庫方法小結(jié)(創(chuàng)建,連接,插入,查詢,刪除等)
這篇文章主要介紹了C#操作SQLite數(shù)據(jù)庫方法,包括針對SQLite數(shù)據(jù)庫的創(chuàng)建,連接,插入,查詢,刪除等操作,并提供了一個SQLite的封裝類,需要的朋友可以參考下2016-07-07C#調(diào)用FFplay實現(xiàn)播放視頻功能
這篇文章主要為大家詳細(xì)介紹了C#如何調(diào)用FFplay實現(xiàn)播放視頻功能,文中的示例代碼講解詳細(xì),具有一定的參考價值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10