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

yizhihongxing

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开发跳槽

原文链接:https://www.cnblogs.com/xbhp/p/17352265.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解C#泛型:new与where关键字全解析 - Python技术站

(0)
上一篇 2023年4月30日
下一篇 2023年5月1日

相关文章

  • 在ASP.NET 2.0中操作数据之五十三:在Data Web控件显示二进制数据

    在ASP.NET 2.0中,我们可以使用Data Web控件来操作和显示数据。在一些情况下,我们需要在Data Web控件中显示二进制数据,例如图片、音频等。本文将带您了解如何在Data Web控件中显示二进制数据,包括图片等。 将二进制数据转换为Base64编码 我们可以将二进制数据转换为Base64编码,以便在Data Web控件中进行显示。Base64…

    C# 2023年6月3日
    00
  • C# 中 “$” 符号的作用以及用法详解

    当在C#中使用字符串时,我们经常需要将一些变量或表达式的值嵌入到字符串中。使用传统的字符串连接方式比较繁琐,更好的选择是使用“$”符号创建格式化字符串,这种方法被称为字符串插值。 $符号的作用 在C#中,$符号可以用来创建格式化字符串。使用$符号创建的字符串,可以包含嵌入的表达式或变量,而不需要使用任何字符串串联符号,同时提供更加方便的可读性和代码清晰度。 …

    C# 2023年6月6日
    00
  • 关于C# dynamic装箱问题

    关于C# dynamic装箱问题的完整攻略如下: 什么是dynamic装箱问题? 在C#中,装箱是将值类型转换为对象类型的过程。而使用dynamic关键字来定义变量时,如果对变量进行对象方法或属性的访问,就会引起装箱的问题,也就是将值类型的变量转成对象类型,这样会造成性能上的损失。 解决方案 为了避免这个问题,我们可以使用以下两种方式: 1. 使用var变量…

    C# 2023年6月6日
    00
  • 如何用C#验证IP是否为局域网地址

    首先,我们需要了解什么是IP地址和局域网地址。 IP地址是Internet Protocol Address的缩写,也就是网络协议地址的意思。它是用来标识网络上的设备的数字串,类似于人类的身份证号码。而局域网地址则是指在局域网内的设备所使用的地址范围。通常局域网地址以“192.168”或“10.”开头。 下面是使用C#语言验证IP地址是否为局域网地址的代码:…

    C# 2023年6月6日
    00
  • 游戏开发之随机概率的选择算法

    游戏开发中,随机数算法是一个非常重要的部分,它常常被用来在游戏当中生成随机的事件、物品、角色属性等等。而其中选择算法则是如何从一个固定的集合中,按照一定的概率来随机选择一个目标的算法。 以下是游戏开发中常用的三种选择算法: 1. 等概率随机算法 这种算法是最简单的一种,它的实现原理是先生成一个 0-1 之间的随机数,然后将这个随机数乘以集合元素的个数,将结果…

    C# 2023年6月7日
    00
  • .NET/C# 使用Stopwatch测量运行时间

    下面给出“.NET/C# 使用Stopwatch测量运行时间”的完整攻略: 1. 前置知识 在学习如何使用Stopwatch测量运行时间之前,需要先了解以下几个概念: .NET:是一个跨平台的应用程序框架,可用于开发Windows、macOS和Linux等系统上的应用程序。 C#:是一种基于.NET框架的高级编程语言,用于开发各种类型的应用程序。 Stopw…

    C# 2023年6月1日
    00
  • 学会使用C#异常

    当我们在编写 C# 程序时,难免会发生错误。这时候,我们需要使用异常处理,来提示程序出现错误。本文将介绍如何学会使用 C# 异常,包括如何定义和处理异常。 异常介绍 异常可以是程序运行过程中的错误、意外情况以及未处理的情况。在 C# 中,异常类继承自 System.Exception 类,程序在发生异常时会自动生成一个异常对象。 异常的分类 C# 中的异常可…

    C# 2023年5月15日
    00
  • C# File.Delete()方法: 删除指定的文件

    C#的File.Delete()作用和使用方法 作用 File.Delete()方法用于删除指定路径的文件。如果文件不存在,则不会发生任何操作。 使用方法 File.Delete()方法的使用语法如下: File.Delete("path"); 其中path参数是待删除的文件路径,可以是绝对路径或相对路径。 以下是删除文件的基本流程: 调…

    C# 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部