首页 文章详情

深入理解C#泛型:new与where关键字全解析

DotNet NB | 2 2023-08-19 01:33 0 0 0
UniSMS (合一短信)

前言


C#泛型中new和where是重要的关键字,它们都可以用于约束泛型类型参数的限制;它们都用于提高代码的安全性和可用性,它们的作用在很大程度上提高了代码的可读性和可维护性。

这篇文章中,我们将一起了解泛型中的new和where 以及它们之间的区别。

一、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默认类带一个无参数的构造函数。

二、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);
    }
}

三、结语

本文简单介绍了new和where关键字及它们的案例,new和where关键字都是C#泛型中非常重要的关键字,它们在代码中起着至关重要的作用。

学会正确使用和理解它们的区别,可以让我们编写更加安全、可读和可维护的代码。


推荐阅读:
基于.Net 的图形验证码模块
一个基于Asp.Net Core + Angular + Bootstrap开源CMS系统
跟进 .NET 8 Blazor 之 ReuseTabs 支持 Query 属性绑定
asp.net core入门之Startup
.NET开源免费功能最全的商城项目
超越.NET极限-我做的高精度数值计算库

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2023开发者路线图
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf开发者大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终总结
回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。



good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter