a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C#泛型約束的深入理解

2020-01-24 03:15:18
字體:
來源:轉載
供稿:網友
where 子句用于指定類型約束,這些約束可以作為泛型聲明中定義的類型參數的變量。
1.接口約束。
例如,可以聲明一個泛型類 MyGenericClass,這樣,類型參數 T 就可以實現 IComparable<T> 接口:
復制代碼 代碼如下:

public class MyGenericClass<T> where T:IComparable { }

2.基類約束:指出某個類型必須將指定的類作為基類(或者就是該類本身),才能用作該泛型類型的類型參數。
這樣的約束一經使用,就必須出現在該類型參數的所有其他約束之前。
復制代碼 代碼如下:

class MyClassy<T, U>
where T : class
where U : struct
{
}

3.where 子句還可以包括構造函數約束。
可以使用 new 運算符創建類型參數的實例;但類型參數為此必須受構造函數約束 new() 的約束。new() 約束可以讓編譯器知道:提供的任何類型參數都必須具有可訪問的無參數(或默認)構造函數。例如:
復制代碼 代碼如下:

public class MyGenericClass <T> where T: IComparable, new()
{
// The following line is not possible without new() constraint:
         T item = new T();
}

new() 約束出現在 where 子句的最后。
4.對于多個類型參數,每個類型參數都使用一個 where 子句
例如:
復制代碼 代碼如下:

interface MyI { }
class Dictionary<TKey,TVal>
where TKey: IComparable, IEnumerable
where TVal: MyI
{
public void Add(TKey key, TVal val)
{
}
}

5.還可以將約束附加到泛型方法的類型參數,例如:
復制代碼 代碼如下:

public bool MyMethod<T>(T t) where T : IMyInterface { }

請注意,對于委托和方法兩者來說,描述類型參數約束的語法是一樣的:
復制代碼 代碼如下:

delegate T MyDelegate<T>() where T : new()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久久久av | 精品国产乱码久久久久久久软件 | 国产真实乱全部视频 | 亚洲精品一区久久久久久 | 中文字幕精品一区二区三区精品 | 午夜免费av | 特级淫片女子高清视频在线观看 | 亚洲精品视频在线播放 | 亚洲区视频在线 | 美国黄色毛片 | 精品国产乱码久久久久久闺蜜 | 97综合| 国产一区二区三区久久 | 热re99久久精品国产99热 | 国产成人在线播放 | 欧美激情在线播放 | 操老逼| 国产精品一区二区精品 | 最新国产精品精品视频 | 精品久久不卡 | 久久888 | 亚洲嫩草 | 精品亚洲永久免费精品 | 青青操av| 久久成人在线 | 国产精品国产精品国产专区不片 | 亚洲精品9999 | 久久久噜噜噜www成人网 | 午夜小影院 | 中文字幕一区二区三区四区 | 国产精品免费观看 | 一区小视频 | 中文字幕第80页 | 99国内精品久久久久久久 | 亚洲女人天堂成人av在线 | 黄色影院在线看 | 国产美女在线播放 | 人人干人人干人人 | 免费一级淫片 | 伊人欧美在线 | 欧美日韩国产高清视频 |