亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

class A<T>where T:new()是什么意思?

class A<T>where T:new()是什么意思?

ITMISS 2019-05-26 21:06:15
class A<T>where T:new()是什么意思
查看完整描述

5 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

這是C#泛型類聲明的語法
class A<T> 表示 A類接受某一種類型,泛型類型為T,需要運行時傳入
where表明了對類型變量T的約束關系。where T:new()指明了創建T的實例時應該具有構造函數。一般情況下,無法創建一個泛型類型參數的實例。然而,new()約束改變了這種情況,要求類型參數必須提供一個無參數的構造函數。

查看完整回答
反對 回復 2019-06-01
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

where表明了對類型變量T的約束關系。where T: A表示類型變量是繼承于A的,或者是A本身。where T:new()指明了創建T的實例時應該使用的構造函數。

查看完整回答
反對 回復 2019-06-01
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

要T是繼承于A
where T: A
要T繼承于B的
where T: B

在定義泛型類時,可以對客戶端代碼能夠在實例化類時用于類型參數的類型種類施加限制。如果客戶端代碼嘗試使用某個約束所不允許的類型來實例化類,則會產生編譯時錯誤。這些限制稱為約束。約束是使用 where 上下文關鍵字指定的。下表列出了六種類型的約束:

約束
說明

T:結構
類型參數必須是值類型。可以指定除 Nullable 以外的任何值類型。有關更多信息,請參見使用可以為 null 的類型(C# 編程指南)。

T:類
類型參數必須是引用類型;這一點也適用于任何類、接口、委托或數組類型。

T:new()
類型參數必須具有無參數的公共構造函數。當與其他約束一起使用時,new() 約束必須最后指定。

T:<基類名>
類型參數必須是指定的基類或派生自指定的基類。

T:<接口名稱>
類型參數必須是指定的接口或實現指定的接口??梢灾付ǘ鄠€接口約束。約束接口也可以是泛型的。

T:U
為 T 提供的類型參數必須是為 U 提供的參數或派生自為 U 提供的參數。這稱為裸類型約束。

//---------------------------------
補充,由于泛型約束表達式全部是“AND”關系,所以不可能表示出“或”關系來,而且C#不支持多重繼承,所以樓主的,這種或繼承自A,或繼承自B的需求,是無法實現的。



查看完整回答
反對 回復 2019-06-01
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

第一:where只用于泛型,所以應該是:
public class BaseClass<T> where T : new()
{
public T SomeMethod()
{
return new T();
}
}
第二:
where T : new()的意思是,這個T必須有public構造函數,如果new BaseClass<T>()的時候,這個T沒有public 構造函數,將編譯錯誤.

第三:
除了new(),where后面可以有好多種內容,去約束T.
比如:public class MyGenericClass<T> where T:IComparable { }等.

查看完整回答
反對 回復 2019-06-01
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

這個規定了T的類型必須要有一個無參的公有的構造方法.
不過你這類的簽名是不是有問題?
BaseClass<T> where T : new()
應該是這樣.
看下樓上給的MSDN地址吧,講的比較細.
"The type argument must have a public parameterless constructor. When used together with other constraints, the new() constraint must be specified last."
這句我給你翻譯下吧...有很多程序員不懂英語的..
"類型參數必須有一個公有的,無參數的構造方法.當和別的約束一起使用的時候,new()約束必須放在最后"

查看完整回答
反對 回復 2019-06-01
  • 5 回答
  • 0 關注
  • 3516 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號