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

yizhihongxing

浅析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# Invoke,begininvoke的用法详解

    C#中的Invoke和BeginInvoke是两个非常重要的方法,它们可以在多线程程序开发中扮演重要的角色。 Invoke和BeginInvoke的作用 Invoke和BeginInvoke的作用都是在UI线程上执行一个委托,Invoke会使调用线程阻塞,而BeginInvoke则会立即返回并在UI线程上异步执行委托。 在WinForm应用程序中,由于涉及到…

    C# 2023年5月15日
    00
  • C#实现语音播报功能

    首先需要明确的是,实现语音播报功能需要使用语音合成技术,而C#中的一个常用的语音合成接口就是System.Speech.Synthesis。 下面是实现语音播报的完整步骤: 1. 添加System.Speech.Synthesis引用 打开Visual Studio的解决方案,右键点击项目,选择“添加”->“引用”。在弹出的对话框中,找到“System…

    C# 2023年5月14日
    00
  • ASP.NET操作各类时间段获取方法汇总

    ASP.NET操作各类时间段获取方法汇总 在ASP.NET中,我们常常需要获取各类时间段,例如获取当前时间、获取某个日期的年月日信息、获取指定时间段的日期列表。本文将系统介绍ASP.NET操作各类时间段获取方法及其使用场景,包括以下几个方面: 获取当前时间 获取当前日期的年月日信息 获取指定时间段的日期列表 1. 获取当前时间 要获取当前时间,我们可以使用 …

    C# 2023年6月1日
    00
  • .net core高吞吐远程方法如何调用组件XRPC详解

    .Net Core高吞吐远程方法调用组件XRPC详解 简介 在使用.Net Core编写高性能微服务的时候,我们经常需要进行远程方法调用(RPC),以便各个服务可以相互通信,协同处理业务。而组件XRPC就是.Net Core框架中常用的高性能、跨语言、跨平台RPC组件,可以帮助我们轻松构建RPC服务。 XRPC是什么? XRPC是一种轻量级、高性能(支持每秒…

    C# 2023年6月6日
    00
  • c# 实现文件上传下载功能的实例代码

    实现文件上传和下载功能是很常见的需求,在C#中实现这样的功能并不困难。 上传文件 实现过程 选择一个合适的 form 布局,使得用户可以方便地选择文件,并设计好交互流程。 在后台代码中,需要通过 HttpPostedFileBase 类型接收表单上传的文件。可以通过以下代码来实现文件上传的操作: [HttpPost] public ActionResult …

    C# 2023年5月31日
    00
  • C# WPF 建立无边框(标题栏)的登录窗口的示例

    下面是C#WPF建立无边框(标题栏)的登录窗口的完整攻略,包含两条示例。 1. 在XAML中设置窗口样式 我们可以在XAML文件中设置窗口的样式。首先,我们需要设置窗口的ResizeMode属性为NoResize,这将禁用窗口的缩放功能。接着,我们可以设置窗口Chrome样式为None,这将清除窗口的默认边框,而且我们需要手动添加窗口的标题栏和关闭按钮。 &…

    C# 2023年5月15日
    00
  • C# Path.GetFileName()方法: 获取指定路径的文件名

    C#中Path.GetFileName()的作用与使用方法 在C#编程中,Path.GetFileName()用于从指定的路径中获取文件名和扩展名。 使用方法 方法的语法如下: public static string GetFileName (string path); 其中,参数path表示需要获取文件名的路径。 实例说明 例1:获取路径中的文件名 以下…

    C# 2023年4月19日
    00
  • 区分c# 前台和后台线程

    要区分C#前台和后台线程,主要是要理解它们之间的区别以及相应的使用场景。以下是区分C#前台和后台线程的完整攻略: 什么是前台线程和后台线程 前台线程 前台线程是指在应用程序的主线程中创建的线程,这些线程会阻止应用程序的终止,只有在所有前台线程执行完成后应用程序才会退出。 后台线程 后台线程是指在应用程序中创建的没有阻止应用程序终止的线程,当所有前台线程都执行…

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