字典Dict
//使string鍵不區分大小寫
Dictionary<string, int> things =new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
Dictionary<string, int> sta = new Dictionary<string, int>()
{//初始化索引器 [key] = value
["str1"] = 6,
["str2"] = 7
};
定義範型類
class MyClass<T1,T2,T3>
{//不能直接将T1當做類建立執行個體
private T1 type1;
public MyClass(T1 item1) => type1 = item1;
public T1 Type1 { get => type1;}
public bool Compare(T1 op1,T2 op2)
{
return op1 != null && op2 != null;
}
}
Default關鍵字
用于執行個體化時為不同類型的字段或屬性指派
class Default關鍵字<T>
{
private T t1;
/// <summary>
/// 當不能确定值類型或引用類型時,用下述方法
/// 此時若T為引用類型則指派null,T為值類型則指派0
/// </summary>
public Default關鍵字()
{
t1 = default(T);
}
}
限制類型
對範型類型進行限制,使其可用類型受到限制
限制 | 定義 |
struct | 類型必須是值類型 |
class | 類型必須是引用類型 |
base-class | 類型必須是基類或繼承自基類。可以給這個限制提供任意類名。 |
interface | 類型必須是接口或實作了接口 |
new() | 類型必須有一個公共的無參構造函數 |
注意:如果new()用作限制,他就必須是為類型指定的最後一個限制
class Where限制<T1, T2,T3>where T1 :struct where T2 :T3
{
//限制必須是接口、非密封類或類型參數
//在繼承含有限制的範型時,T不能超集
}
class Animals<T1> where T1:Animal
{
private List<T1> animal;
public List<T1> Animal { get => animal; }
public void Tests()
{
foreach (T1 str in Animal)
{
//對str操作
}
}
}
多态性的運用
範型方法與多态性的結合,例如如下方法,可以篩選出任意Animal下的子類型
class Animals<T1> where T1:Animal
{
private List<T1> animal;
public List<T1> Animal { get => animal; }
public Animals<U> GetAnimals<U>() where U:T1
{//
Animals<U> animalss = new Animals<U>();
foreach (T1 ani in Animal)
{
if(ani is U)
animalss.animal.Add(ani as U);//此處ani必須有明确的類型限制,不然會報錯
}
return animalss;
}
}
範型結構
public struct MyStruct<T1,T2>
{//範型結構
public T1 t1;
public T2 t2;
public T1 t3;
public T2 t4;
}
範型接口
public interface MyAnimalInterface<T1> where T1 : struct
{//範型接口
void Test1(T1 a1, T1 a2);
int GetInt(T1 a1);
T1 GetT1 { get;}
}