浅谈C#2.0泛型中的变化:default关键字

 更新时间:2013年09月05日 09:59:39   作者:  
下面就详细的说明一下。之所以会用到default关键字,是因为需要在不知道类型参数为值类型还是引用类型的情况下,为对象实例赋初值

今天回答别人问题的时候,才发现原先的T.default语法被取消了,使用了新的default关键字来实现这一功能。还好回复前动手试了一下,不然就...

下面详细说明一下。之所以会用到default关键字,是因为需要在不知道类型参数为值类型还是引用类型的情况下,为对象实例赋初值。考虑以下代码:

复制代码 代码如下:

class TestDefault<T>
    {
        public T foo()
        {
            T t = null; //???
            return t;
        }
    }

如果我们用int型来绑定泛型参数,那么T就是int型,那么注释的那一行就变成了 int t = null;显然这是无意义的。为了解决这一问题,引入了default关键字:
复制代码 代码如下:

class TestDefault<T>
    {
        public T foo()
        {
                return default(T);
        }
    }

以下是测试用的代码,看了之后就应该很快能明白,default关键字的作用:
复制代码 代码如下:

 class Program
    {
        static void Main(string[] args)
        {
            TestDefault<int> t1 = new TestDefault<int>();
            int i = t1.foo();
            System.Diagnostics.Debug.Assert(i == 0);

            TestDefault<object> t2 = new TestDefault<object>();
            object o = t2.foo();
            System.Diagnostics.Debug.Assert(o == null);
        }
    }


最后说明一下,在.net 2.0的早期preview中,没有default关键字,使用如下的方式实现default关键字的功能:
复制代码 代码如下:

class TestDefault<T>
    {
        public T foo()
        {
                return T.default;
        }
    }

这段代码在vs 2005 beta1中,已经不能通过编译了。

相关文章

  • C#判断上传文件是否是图片以防止木马上传的方法

    C#判断上传文件是否是图片以防止木马上传的方法

    这篇文章主要介绍了C#判断上传文件是否是图片以防止木马上传的方法,对于网络安全来说至关重要,需要的朋友可以参考下
    2014-07-07
  • Entity Framework映射TPH、TPT、TPC与继承类

    Entity Framework映射TPH、TPT、TPC与继承类

    这篇文章介绍了Entity Framework映射TPH、TPT、TPC与继承类,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C# 匿名方法基础回顾

    C# 匿名方法基础回顾

    本篇文章主要介绍了C#的匿名方法的参数使用范围以及委托示例。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • C#实现影院售票系统

    C#实现影院售票系统

    这篇文章主要为大家详细介绍了C#实现影院售票系统,解析了售票系统的难点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C#窗体间通讯的几种常用处理方法总结

    C#窗体间通讯的几种常用处理方法总结

    这篇文章主要介绍了C#窗体间通讯的几种常用处理方法总结,有很好的实用价值,需要的朋友可以参考下
    2014-08-08
  • c#字符串编码编码(encoding)使用方法示例

    c#字符串编码编码(encoding)使用方法示例

    System.Text提供了Encoding的抽象类,这个类提供字符串编码的方法。使Unicode字符数组的字符串,转换为指定编码的字节数组,或者反之,看下面的例子
    2013-12-12
  • 基于WPF实现面包屑控件的示例代码

    基于WPF实现面包屑控件的示例代码

    这篇文章主要为大家详细介绍了如何基于WPF实现简单的面包屑控件,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2023-05-05
  • C#借助OpenCvSharp读取摄像头并显示的实现示例

    C#借助OpenCvSharp读取摄像头并显示的实现示例

    OpenCvSharp是一个OpenCV的.Net wrapper,应用最新的OpenCV库开发,本文主要介绍了C#借助OpenCvSharp读取摄像头并显示的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2022-05-05
  • 新手必看Unity2019 2020保姆级安装教程

    新手必看Unity2019 2020保姆级安装教程

    这篇文章主要介绍了Unity2019 2020安装教程,本文分步骤通过图文并茂的形式给大家介绍Unity2019 2020安装方法,需要的朋友可以参考下
    2021-05-05
  • C#超市收银系统设计

    C#超市收银系统设计

    这篇文章主要为大家详细介绍了C#超市收银系统设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论