浅析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#中string.format用法详解

    下面是详细讲解“C#中string.format用法详解”的完整攻略。 1. string.format简介 C#中的字符串是由System.String类实现的,使用大量的内部标准函数。在C#中,可以使用多种方式来格式化字符串,使用C#中的string.format函数是其中一种。 string.format是一个静态方法,它可以将一个或多个对象的字符串表…

    C# 2023年6月1日
    00
  • C# Mysql 查询 Rownum的解决方法

    下面就给你详细讲解C#和Mysql查询Rownum的解决方法。 什么是Rownum Rownum是Oracle数据库中的一个概念,用于获取指定条件下的前N条记录,但是在Mysql中并没有Rownum,可以通过一些技巧模拟出来。 解决方法 方法一:使用变量模拟Rownum 通过定义一个变量,然后根据变量的值来返回前N条结果。 SET @num := 0, @r…

    C# 2023年5月15日
    00
  • asp中用insert into语句向数据库插入记录(添加信息)的方法

    以下是详细讲解“asp中用insert into语句向数据库插入记录(添加信息)的方法”的完整攻略: 1. 连接数据库 在使用insert into语句插入记录之前,我们需要首先连接到数据库,使用ADODB.Connection对象可以实现数据库连接。连接数据库的代码如下: <% ‘Recordset对象用于存储和处理从数据库中检索出来的数据 Dim …

    C# 2023年5月31日
    00
  • C#软件注册码的实现代码

    下面为您提供 “C#软件注册码的实现代码” 的详细攻略。 1. 概述 “软件注册码” 是一串由软件作者生成的唯一代码,用于验证软件的合法性。通常,用户需要在安装软件后输入注册码,以便解锁软件的全部功能。 在C#语言中,我们可以生成随机的注册码,并将其与用户输入的注册码进行比对来验证其合法性。 2. 实现方法 我们可以使用”MD5加密算法”和”Base64编码…

    C# 2023年5月31日
    00
  • C# 6.0 内插字符串(Interpolated Strings )的使用方法

    当我们需要将表达式嵌入到字符串中时,常规做法是使用字符串拼接。C# 6.0 为我们提供了内插字符串(Interpolated Strings)功能,使得我们可以更方便地将表达式嵌入到字符串中。本文将详细介绍内插字符串的使用方法。 什么是内插字符串? 在 C# 6.0 中,内插字符串是一种新的字符串语法,它允许将变量值或表达式嵌入到字符串中。内插字符串使用 $…

    C# 2023年6月3日
    00
  • 详解C# 泛型中的数据类型判定与转换

    接下来我将为你详细讲解“详解C#泛型中的数据类型判定与转换”的完整攻略。 1. 前言 本篇文章介绍如何在C#泛型中进行数据类型的判定和转换,这是C#编程中非常常见的需求,尤其在开发框架和类库时尤为频繁。因此,本文详细介绍了C#泛型中常用的数据类型判定和转换方式。 2. 常用的类型判定和转换方式 2.1 类型判定 2.1.1 as 运算符 as 运算符是C#语…

    C# 2023年5月14日
    00
  • c#转换全角半角方法示例

    当我们需要对用户输入的字符或文本进行处理时,经常需要将全角字符转换为半角字符或者将半角字符转换为全角字符。c#中提供了相应的方法来实现这些功能。下面是一个完整的示例说明“c#转换全角半角方法”的攻略。 1. 转换全角到半角 使用 System.Text.RegularExpressions.Regex 类的 Replace 方法可以实现将全角字符转换为半角字…

    C# 2023年6月8日
    00
  • 详解C#中三个关键字params,Ref,out

    介绍params、ref、out这三个关键字的用法及不同之处是C#入门必备的知识。下面我们分别介绍一下这三个关键字的用法以及示例说明。 params params关键字用于表示方法传入参数的个数可能是可变的,具体用法是将类型后加上“params”关键字,如下: public void Add(params int[] numbers) { int sum =…

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