深入理解C#泛型:new与where关键字全解析
C#泛型中new和where是重要的关键字,它们都可以用于约束泛型类型参数的限制;它们都用于提高代码的安全性和可用性,它们的作用在很大程度上提高了代码的可读性和可维护性。在这篇文章中,我们将一起了解泛型中的new和where,以及它们之间的区别。
1. new关键字
在C#泛型中,new关键字被用于指定泛型类型参数必须具有公共的无参数构造函数。
使用new关键字指定泛型类型参数需要有无参数构造函数时,可以保证我们在使用泛型类型参数来创建实例时不会发生运行时错误。如果我们使用了没有公共无参数构造函数的泛型类型参数,就会在运行时抛出异常。
使用示例:
class ItemFactory<T> where T : new()
{
public T Fun()
{
var t=new T();
return t;
}
}
//调用:
public class Test
{
public void Testfun()
{
var rel= new ItemFactory<Pet>();
rel.Fun();
}
}
public class Pet
{
//new默认带无参数构造函数,如果有参数的构造函数报错
//public Pet(string test)
//{ }
public string Name { get; set; }
public int Age { get; set; }
}
.NET默认类带一个无参数的构造函数。
2. where关键字
在C#泛型中,where关键字用于指定泛型类型参数的约束条件。泛型定义中的 where 子句指定对用作泛型类型、方法、委托或本地函数中类型参数的参数类型的约束。约束可指定接口、基类或要求泛型类型为引用、值或非托管类型。约束声明类型参数必须具有的功能,并且约束必须位于任何声明的基类或实现的接口之后。
使用示例:
//只允许类
class UsingClass<T> where T : class
{
public T Fun()
{
return default(T);
}
}
//只允许枚举
class UsingEnum<T> where T : System.Enum
{
public T Fun()
{
return default(T);
}
}
//只允许类和结构类型
class UsingClassStruct<T,U> where T : class where U : struct
{
public T Fun()
{
return default(T);
}
}
//欢迎公众号:DOTNET开发跳槽,领取海量面试题
3、结语
本文简单介绍了new和where关键字及它们的案例,new和where关键字都是C#泛型中非常重要的关键字,它们在代码中起着至关重要的作用。学会正确使用和理解它们的区别,可以让我们编写更加安全、可读和可维护的代码。希望本文对你有所收获,欢迎留言和吐槽。
参考:微软官方文档
来源公众号:DotNet开发跳槽