• C#泛型回顾点滴


    前言

    C#的泛型一直是学习者津津乐道的课题了,这确实是一个非常有用的特性,不过在实际使用中,还是有很多需要注意的地方,我们需要通过自己动手实践以及结合理论进行理解,最终总结出自己的编码规范和最佳实践

    案例1

    internal struct TestStruct : IEquatable<TestStruct>
    {
        bool IEquatable<TestStruct>.Equals(TestStruct other)
        {
            return true;
        }
    }
    
    internal class TesterClass
    {
        // Methods
        public static bool AreEqual<T>(T arg1, T arg2) where T : IEquatable<T>
        {
            return arg1.Equals(arg2);
        }
    
        public static void Run()
        {
            TestStruct t1 = new TestStruct();
            TestStruct t2 = new TestStruct();
            Debug.Assert(((IEquatable<TestStruct>)t1).Equals(t2));
            Debug.Assert(AreEqual<TestStruct>(t1, t2));
        }
    }

    案例2

    class Program
    {
        static void Main(string[] args)
        {
            Print1(1);
            Print2(1);
            Print3(1);
    
            string a = "ABC";
            string b = "AB";
            string c = b + "C";
    
            bool genericEquals = IsEquals<string>(a, c);
            bool directEquals = (a == c);
    
            Console.ReadKey();
        }
    
        static void Print1<T>(T item)
            where T : struct
        {
            string s = item.ToString();
        }
    
        static void Print2<T>(T item)
        {
            string s = item.ToString();
        }
    
        static void Print3(int item)
        {
            string s = item.ToString();
        }
    
        static bool IsEquals<T>(T t1, T t2)
            where T : class
        {
            return t1 == t2;
        }
    
    }

    思考以上代码,在内部是怎样的执行过程?结果如何?为什么?

    要点

    • 泛型中的装箱和拆箱
    • 泛型中的逆变与协变

    未完待续、、、

    参考:

    http://stackoverflow.com/questions/5531948/how-does-a-generic-constraint-prevent-boxing-of-a-value-type-with-an-implicitly

    http://stackoverflow.com/questions/4403055/boxing-unboxing-and-generics

    http://stackoverflow.com/questions/390900/cant-operator-be-applied-to-generic-types-in-c

    http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx

  • 相关阅读:
    期货结算 期货算法公式
    c# websocket 服务端,客户端 兼容低版本IE,支持超长数据传输 附源码
    翻译API translate api 翻译文档api 百度翻译
    asp.net c# 网页 导出excel 多表格 多个sheet
    创建单线程单元 asp.net下使用WebBrowser
    c++ 修改内存
    c++ int to byte
    webservice 第一节 .net SoapHeader验证
    myeclipse maven编译出错
    java用正则表达式获取domain
  • 原文地址:https://www.cnblogs.com/fecktty2013/p/4114401.html
Copyright © 2020-2023  润新知