zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【JS】【8】拼接字符串
    【JS】【7】获取粘贴板的内容
    【Eclipse】【3】checkstyle插件
    【Eclipse】【2】遇到的问题
    android手机短信监听器,监听到的短信发送到web服务器,完整源码分享
    android手机号归属地查下案例源码
    免费web api接口大全
    android读取远程图片案例
    android向web提交参数的4种方式总结,附带网站案例源码
    csu 10月 月赛 B 题 Scoop water
  • 原文地址:https://www.cnblogs.com/fecktty2013/p/4114401.html
Copyright © 2011-2022 走看看