最近無意中看到了:http://www.php.cn/。但是,人笨啊,木有看懂到底是啥意思,木辦法自己寫一個試試吧,權當做個筆記
例子如下:
介面:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace WhereTest{ /// <summary> /// 水果介面 /// </summary> public interface IFruit { //水果名稱 string FruitName { get; set; } string GetName(); /*介面中只能包含方法、屬性、索引器和事件的聲明。 * 不允許聲明成員上的修飾符,即使是pubilc都不行,因為介面成員總是公有的,也不能聲明為虛擬和靜態。 * 如果需要修飾符,最好讓實作類別來聲明。 */ }}
介面實現:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace WhereTest{ /// <summary> /// 梨子類 /// </summary> public class Peach : IFruit { //無參、公用 建構函式 public Peach() { } private string fruitName; string IFruit.FruitName { get { return this.ToString(); ; } set { fruitName = value; } } string IFruit.GetName() { return string.IsNullOrEmpty(fruitName) ? "木有找到名字" : fruitName; } }}
建立一個帶有泛型約束的類:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace WhereTest{ /// <summary> /// 帶有泛型約束的類 /// </summary> /// <typeparam name="T"></typeparam> public class FruitMarket<T> where T : IFruit, new()//new()的意思是,這個T必須有public建構函式 { T item = new T(); public void FruitSayHello() { item.FruitName = "我是梨子"; Console.WriteLine("你好:" + string.Format("Fruit:{0}", item.GetName())); Console.ReadKey(); } /*在定義泛型類時,可以對用戶端代碼能夠在執行個體化類時用於型別參數的類型種類施加限制。 * 如果用戶端代碼嘗試使用某個約束所不允許的類型來執行個體化類,則會產生編譯時間錯誤。*/ }}
由於有where字句的泛型約束,所以,建立FruitMarket的對象時,T的類型只能是繼承自IFruit介面的類。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace WhereTest{ class Program { static void Main(string[] args) { //執行個體化之後 只能在static方法中調用相應的方法,否則 根本找不著peach變數 FruitMarket<Peach> peach = new FruitMarket<Peach>(); peach.FruitSayHello(); } }}
運行結果:
以上就是C# where泛型約束的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!