程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#類方法聲明where的用法_菓菓的禮物,

C#類方法聲明where的用法_菓菓的禮物,

編輯:C#入門知識

C#類方法聲明where的用法_菓菓的禮物,


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()

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved