找回密码
 立即注册
快捷导航

[C#] 泛型 之 new与where关键字全解析

[复制链接]
茎肛互撸娃 2023-8-1 23:41:48 | 显示全部楼层

C#泛型中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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-11-23 00:44

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表