浅析c#范型中的特殊关键字where & default

浅析C#范型中的特殊关键字where & default

范型参数的约束:where

C#中的范型可以使方法或类不依赖于具体类型,从而提供了更强的通用性和可扩展性。但范型也有一些局限性,如类型参数无法被强制转换为不相关类型,无法访问特定的方法或属性等。为了解决这些问题,可以使用“范型参数约束”。

范型参数约束的语法格式如下:

class ClassName<T> where T : constraint1, constraint2, ... , constraint_n

其中,T表示范型类型参数,constraint表示一条或多条约束,多条约束使用逗号隔开。

常见的范型参数约束包括:

  • where T : classT必须是引用类型。
  • where T : structT必须是值类型。
  • where T : new()T必须具有公共的无参数构造函数。

范型参数约束会限制类型参数的类型,让T在满足条件的情况下,能够调用约束类型的方法和属性。

下面是一个举例说明:

public class GenericClass<T> where T : IList<int>
{
    public int Sum(T list)
    {
        int sum = 0;
        foreach (int num in list)
        {
            sum += num;
        }
        return sum;
    }
}

这里的泛型类GenericClass中的类型参数T必须是IList<int>类型或其子类。因此,在Sum方法中,list可以调用IList<int>接口中的方法,如Add,而不需要担心无法访问此方法。

范型类型参数的默认值:default

所有类型参数的起始值都是null,但是在某些情况下,为了能够使用默认的起始值,可以使用default关键字。

default为泛型类型参数返回默认值。当使用default关键字时,必须将其放在类型参数名的右侧。

语法格式如下:

T defaultValue = default(T);

示例代码:

static void Main(string[] args)
{
    int i = default(int);
    string s = default(string);
    Console.WriteLine(i); // 输出0
    Console.WriteLine(s == null); // 输出True
}

在这个示例中,default(int)返回的是0,因为int是值类型,而default(string)返回的是null,因为string是引用类型。

默认值的使用场景:

public class TestClass<T>
{
    private T _t;

    public TestClass()
    {
        _t = default(T);
    }

    public override string ToString()
    {
        return _t.ToString();
    }
}

这里的_tT类型的对象,在调用TestClass构造函数时,将调用default(T),把其返回值赋值给_t变量。当使用ToString方法时,将使用该对象的默认ToString实现,并把输出写入到控制台。

这是一个范型类型参数的默认值示例,我们可以看到default关键字比手动赋值默认值的方式更加简单易用。

结语

wheredefault是C#范型中的两个关键字,可以约束范型类型参数并返回默认值。通过使用这两个关键字,可以显著提高代码的可读性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析c#范型中的特殊关键字where & default - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#开发中常用的加密解密方法汇总

    C#开发中常用的加密解密方法汇总 本文将介绍一些在C#开发中常用的加密解密方法,包括对称加密、非对称加密、哈希函数等。这些方法可以用于数据安全存储、传输以及验证等场合。 对称加密 对称加密算法使用相同的密钥进行加密和解密,主要有以下几种常用方法: 1. DES加密算法 DES加密算法是一种对称加密算法,具有较高的安全性能。下面是一个简单的DES加密示例: u…

    C# 2023年6月7日
    00
  • (asp.net c#)DropDownList绑定后显示对应的项的两种方法

    下面是详细讲解“(asp.net c#)DropDownList绑定后显示对应的项的两种方法”的攻略: 1. 根据绑定的值选中对应的项 如果绑定的是数据源,可以在数据绑定完成后,通过设置DropDownList的SelectedItem属性,来实现选中对应的项。 “`csharp // 获取数据源 List data = new List{“apple”,…

    C# 2023年5月31日
    00
  • c# 在Emit代码中如何await一个异步方法

    在 C# 中,可以通过使用 Emit 代码来动态生成 IL 字节码,实现类似于代码生成器或者 AOP 的功能。当我们需要在 Emit 代码中调用异步方法并且等待其完成时,需要按照以下步骤进行: Step 1: 定义异步委托 在 Emit 代码中调用异步方法,需要定义一个委托类型来表示异步方法的调用方式和返回值类型。例如,如果异步方法的返回值类型是 Task&…

    C# 2023年6月1日
    00
  • React项目中fetch实现跨域接收传递session的解决方案

    React项目中fetch实现跨域接收传递session的解决方案 在 React 项目中,使用 fetch 发送跨域请求时,如果需要接收和传递 session,需要进行一些特殊的处理。本攻略将介绍如何在 React 项目中使用 fetch 实现跨域接收传递 session 的解决方案。 解决方案 以下是在 React 项目中使用 fetch 实现跨域接收传…

    C# 2023年5月17日
    00
  • ASP.NET Core MVC中Required与BindRequired用法与区别介绍

    在ASP.NET Core MVC中,Required和BindRequired都是用于验证模型绑定的属性是否为必填项的特性。本攻略将深入探讨Required和BindRequired的用法和区别,并提供两个示例说明。 Required特性 Required特性用于验证模型绑定的属性是否为必填项。如果属性为空,则模型验证将失败。以下是一个示例: public…

    C# 2023年5月17日
    00
  • asp.net(C#) 生成随机验证码的代码

    生成随机验证码的代码可以使用C#语言的 .NET Framework提供的Random类和StringBuilder类。下面是示例代码: using System; using System.Text; public static class RandomCode { public static string Generate(int length) { c…

    C# 2023年5月31日
    00
  • C#实现在线点餐系统

    C#实现在线点餐系统需要包含以下步骤: 1. 确定需求和功能 在开发任何系统之前,我们必须确定系统需要完成的功能。在在线点餐系统中,一般需要实现以下功能: 用户可以注册或登录,推荐使用ASP.NET Identity框架来实现用户认证和授权功能 用户可以在系统中浏览菜单、查看菜品详细信息、添加菜品到购物车并下单 店家可以登录系统查看订单信息,更新订单状态等功…

    C# 2023年6月1日
    00
  • c# 读取Northwind数据库image字段

    读取Northwind数据库中的image字段,可以通过ADO.NET提供的SqlDataReader类或者DataSet类中的DataTable来完成。 以下是实现步骤: 步骤一:连接数据库 使用System.Data.SqlClient命名空间中的SqlConnection类连接Northwind数据库。 示例代码: using System.Data.…

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