当前位置: 首页> 娱乐> 影视 > 二级域名如何申请_草莓丝瓜芭乐鸭脖奶茶的定价策略_上海网络优化服务_产品运营主要做什么

二级域名如何申请_草莓丝瓜芭乐鸭脖奶茶的定价策略_上海网络优化服务_产品运营主要做什么

时间:2025/7/14 18:21:51来源:https://blog.csdn.net/m0_72813396/article/details/144797978 浏览次数:2次
二级域名如何申请_草莓丝瓜芭乐鸭脖奶茶的定价策略_上海网络优化服务_产品运营主要做什么

使用约束的原因

约束指定类型参数的功能和预期。 声明这些约束意味着你可以使用约束类型的操作和方法调用。 如果泛型类或方法对泛型成员使用除简单赋值之外的任何操作,包括调用 System.Object 不支持的任何方法,则对类型参数应用约束。 例如,基类约束告诉编译器,只有此类型的对象或派生自此类型的对象可替换该类型参数。 编译器有了此保证后,就能够允许在泛型类中调用该类型的方法。 以下代码示例演示可通过应用基类约束添加到(泛型介绍中的)GenericList<T> 类的功能。

public class Employee
{public Employee(string name, int id) => (Name, ID) = (name, id);public string Name { get; set; }public int ID { get; set; }
}public class GenericList<T> where T : Employee
{private class Node{public Node(T t) => (Next, Data) = (null, t);public Node? Next { get; set; }public T Data { get; set; }}private Node? head;public void AddHead(T t){Node n = new Node(t) { Next = head };head = n;}public IEnumerator<T> GetEnumerator(){Node? current = head;while (current != null){yield return current.Data;current = current.Next;}}public T? FindFirstOccurrence(string s){Node? current = head;T? t = null;while (current != null){//The constraint enables access to the Name property.if (current.Data.Name == s){t = current.Data;break;}else{current = current.Next;}}return t;}
}

约束使泛型类能够使用 Employee.Name 属性。 约束指定类型 T 的所有项都保证是 Employee 对象或从 Employee 继承的对象。

可以对同一类型参数应用多个约束,并且约束自身可以是泛型类型,如下所示:

class EmployeeList<T> where T : notnull, Employee, IComparable<T>, new()
{// ...public void AddDefault(){T t = new T();// ...}
}

 在应用 where T : class 约束时,请避免对类型参数使用 == 和 != 运算符,因为这些运算符仅测试引用标识而不测试值相等性。 即使在用作参数的类型中重载这些运算符也会发生此行为。 下面的代码说明了这一点;即使 String 类重载 == 运算符,输出也为 false。

public static void OpEqualsTest<T>(T s, T t) where T : class
{System.Console.WriteLine(s == t);
}private static void TestStringEquality()
{string s1 = "target";System.Text.StringBuilder sb = new System.Text.StringBuilder("target");string s2 = sb.ToString();OpEqualsTest<string>(s1, s2);
}

 

编译器只知道 T 在编译时是引用类型,并且必须使用对所有引用类型都有效的默认运算符。 如果必须测试值相等性,请应用 where T : IEquatable<T> 或 where T : IComparable<T> 约束,并在用于构造泛型类的任何类中实现该接口。

约束多个参数

可以对多个参数应用多个约束,对一个参数应用多个约束,如下例所示:

class Base { }
class Test<T, U>where U : structwhere T : Base, new()
{ }

 

关键字:二级域名如何申请_草莓丝瓜芭乐鸭脖奶茶的定价策略_上海网络优化服务_产品运营主要做什么

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: