csharppublic class MyGenericClass where T : struct{ private T _value; public void SetValue(T value) { _value = value; } public T GetValue() { return _value; }}public static void Main(){ MyGenericClass myInt = new MyGenericClass(); myInt.SetValue(10); Console.WriteLine(myInt.GetValue()); // 输出:10 MyGenericClass myDouble = new MyGenericClass(); myDouble.SetValue(3.14); Console.WriteLine(myDouble.GetValue()); // 输出:3.14}
在上面的示例中,我们定义了一个名为 MyGenericClass 的泛型类,并使用 "where T : struct" 约束来限制 T 为值类型。然后,我们在 Main 方法中实例化了 MyGenericClass 的两个对象,分别传递了 int 和 double 类型作为类型参数,并调用了 SetValue 和 GetValue 方法进行赋值和获取值操作。字符串约束字符串是 C# 中的引用类型,它表示一个字符序列。在某些情况下,我们可能需要限制泛型类型参数为字符串类型,以确保代码的正确性和一致性。为了限制泛型类型参数为字符串类型,我们可以使用 "where T : class" 约束。这样,只有字符串类型才能作为类型参数传递给泛型类、方法或接口。下面是一个简单的示例代码:
csharppublic class MyGenericClass where T : class{ private T _value; public void SetValue(T value) { _value = value; } public T GetValue() { return _value; }}public static void Main(){ MyGenericClass myString = new MyGenericClass(); myString.SetValue("Hello, World!"); Console.WriteLine(myString.GetValue()); // 输出:Hello, World!}
在上面的示例中,我们定义了一个名为 MyGenericClass 的泛型类,并使用 "where T : class" 约束来限制 T 为字符串类型。然后,我们在 Main 方法中实例化了 MyGenericClass 的一个对象,并传递了字符串作为类型参数,并调用了 SetValue 和 GetValue 方法进行赋值和获取值操作。本文介绍了 C# 中的通用约束,特别是对值类型和字符串的约束。通过使用 "where T : struct" 约束,我们可以限制泛型类型参数为值类型;通过使用 "where T : class" 约束,我们可以限制泛型类型参数为字符串类型。这些约束可以帮助我们确保代码的正确性和性能,并提供更好的类型安全性和代码复用性。在实际开发中,我们可以根据具体需求选择适当的约束,以满足业务需求和代码设计的要求。