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

这篇具有很好参考价值的文章主要介绍了深入理解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#泛型中非常重要的关键字,它们在代码中起着至关重要的作用。学会正确使用和理解它们的区别,可以让我们编写更加安全、可读和可维护的代码。希望本文对你有所收获,欢迎留言和吐槽。

参考:微软官方文档文章来源地址https://www.toymoban.com/news/detail-424767.html

来源公众号:DotNet开发跳槽

到了这里,关于深入理解C#泛型:new与where关键字全解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Golang开发-new关键字

    在Go语言中,new用于创建一个新的零值对象,并返回指向该对象的指针。它是Go语言中用于分配内存的一种方式。 new的语法如下: 其中,Type表示要创建的对象的类型,ptr是指向新对象的指针。 以下是一个示例,演示如何使用new创建一个新的对象: 在上述

    2024年02月09日
    浏览(10)
  • 【C++那些事儿】深入理解C++类与对象:从概念到实践(下)| 再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元

    【C++那些事儿】深入理解C++类与对象:从概念到实践(下)| 再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元

    📷 江池俊:个人主页 🔥 个人专栏:✅C++那些事儿 ✅Linux技术宝典 🌅 此去关山万里,定不负云起之望 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 虽然上述构造函数调用之后,对象中已经有了一个初始值,但是

    2024年03月21日
    浏览(13)
  • 前端面试题-js-new关键字-this指向-js事件流-防抖节流

    前端面试题-js-new关键字-this指向-js事件流-防抖节流

    1.创建一个简单的空对象 2.原型的绑定,确定对象O的原型链 3.绑定this对象为O,传入参数;执行Person构造函数,进行属性和方法的赋值操作 4.返回结果 普通函数的this指向 函数的this指向有一个基本的原则,谁调用的函数,函数的this就指向谁,否则指向全局 箭头函数的this指向

    2024年01月25日
    浏览(14)
  • C# -- static 关键字

    C# -- static 关键字

    一、static static ,用于修饰类,字段,属性,方法,构造方法等。被 static 修饰的类称之为“静态类”; 被 static 修饰的成员称之为“静态成员”,被修饰过的成员分别称为:静态字段,静态属性,静态方法,静态构造方法。 二、静态字段 1.概念 被 static

    2023年04月19日
    浏览(10)
  • kotlin sealed关键字理解

    Kotlin中的\\\"sealed\\\"用于声明一个\\\"密封类\\\"(sealed class)。密封类是一种特殊的抽象类,用于限制可以继承它的子类。 密封类的主要特点是,它的子类必须定义在与密封类相同的文件中,这样做可以保证只有有限的类可以继承密封类。这种限制能够提供更好的代码可读性和

    2024年02月12日
    浏览(9)
  • Mysql关键字执行顺序-深入解析

    Mysql关键字执行顺序-深入解析

    mysql执行顺序如下: 这些涉及的sql笔者这里就不一一去写了。 Mysql会先执行from,然后根据on去筛选目标表,筛选出的结果再进行join或者using,这样就会形成一个临时表。然后去执行where条件去筛选这个临时表,这样基本就筛选出需要的数据了。然后就可以

    2023年04月22日
    浏览(11)
  • C#中的`out`关键字

    C# 中的 out 是一个用来在方法调用时传递数据的修饰符。它允许你在方法内部创建一个临时的变量,用于接收传递进来的参数值,并在方法执行完毕后,将该变量的值返回给调用方法的对象。out 主要用于那些需要知道方法执行结果的参数上。 在 C# 中,out

    2024年02月22日
    浏览(49)
  • C#中的ref关键字

    1、传递的是参数的值(数据的副本)而不是原始数据本身。 2、函数内部对值参数的修改不会影响到原始数据。 3、通常用于传递基本数据类型(如整数、浮点数、布尔值)或不可变对象(如字符串、元组)。 4、值参数的传递是一种传值调用(Call by Value)。 示例代码 运行结

    2024年02月05日
    浏览(13)
  • C#中out关键字

    在C#中可以使用out,指定所给的参数是一个输出参数。out的使用方式与ref相同,都是在函数定义和函数调用中用作参数的修饰符。 运行结果,如下图所示: 实际上,out的执行方式与引用参数几乎完全一样,因为在函数执行完毕后,该参数的值将返回给函数

    2024年02月05日
    浏览(11)
  • C# void 关键字学习

    C# void 关键字学习

    C#中void是System.Void的别名; 可以将 void 用作方法(或本地函数)的返回类型来指定该方法不返回值; 如果C#方法中没有参数,则不能将void用作参数;这是与C语言不同的,C语言有 int func(void) 这样的; 做一个winform示例看一下;

    2024年02月10日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包