查看原文
其他

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

DotNet 2024-04-12

前言


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#泛型中非常重要的关键字,它们在代码中起着至关重要的作用。

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

希望本文对你有所收获,欢迎留言和吐槽。

转自:翔星

链接:mp.weixin.qq.com/s/HlenORlmB2xApZmDgFEDMw

- EOF -

推荐阅读  点击标题可跳转

.NET 开源免费功能最全的商城项目

你知道 .NET 字符串在内存中是如何存储的吗?

智能制造之路 -从0开始打造一套轻量级MOM平台

看完本文有收获?请转发分享给更多人

推荐关注「DotNet」,提升.Net技能 

点赞和在看就是最大的支持❤️


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存