在C#中,約束是與泛型類型參數一起使用的條件,它們限制了可以用于該類型參數的類型
下面是一個示例,展示了如何在C#中定義和使用約束:
using System;
// 定義一個泛型接口,其中 T 必須實現 IComparable<T> 接口
public interface ISortAlgorithm<T> where T : IComparable<T>
{
void Sort(T[] array);
}
// 定義一個泛型類,其中 T 必須是引用類型
public class MyClass<T> where T : class
{
private T _value;
public MyClass(T value)
{
_value = value;
}
public T GetValue()
{
return _value;
}
}
// 定義一個泛型類,其中 T 必須具有無參數的公共構造函數
public class MyOtherClass<T> where T : new()
{
private T _instance;
public MyOtherClass()
{
_instance = new T();
}
public T GetInstance()
{
return _instance;
}
}
// 定義一個泛型方法,其中 T 必須是值類型
public static class Utility
{
public static bool IsDefault<T>(T value) where T : struct
{
return EqualityComparer<T>.Default.Equals(value, default(T));
}
}
在這個示例中,我們定義了一個泛型接口 ISortAlgorithm<T>
,其中 T 必須實現 IComparable<T>
接口。我們還定義了一個泛型類 MyClass<T>
,其中 T 必須是引用類型。此外,我們還定義了一個泛型類 MyOtherClass<T>
,其中 T 必須具有無參數的公共構造函數,以及一個泛型方法 IsDefault<T>
,其中 T 必須是值類型。