泛型(二)

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

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

引入了default关键字:

class TestDefault<T>
    {
        public T foo()
        {
                return default(T);
        }
    }
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;
        }
    }

 

posted @ 2016-02-24 16:02  ZHLBKY  阅读(134)  评论(0编辑  收藏  举报