zoukankan      html  css  js  c++  java
  • CLR中的范型为什么不支持很多操作符?

    昨天看了一篇文章,关于.NET范型的
    终于明白了为什么以下代码不能编译:

    T  Max<T>( T a, T b )
    {
              if( a<b )
                      return b;
              else
                      return a;
    }

    void main()
    {
               int m = Max<int>( 3, 5 );
    }

    范型的实例化居然是在运行时JIT编译的时候,
    而不是编译器编译的时候,但是编译是会进行类型安全检查
    范型函数中Object中的ToString, GetHashCode等方法是可以调用的,例如上述中你可以调用a.ToString()没问题
    说白了:除非你对类似于a这种参数调用的方法是所有.NET类型都支持的,否则无法通过编译,所以Object中的方法可以调用
    但是可以可以添加约束来搞定需要调用什么方法的问题
    T  Max<T>  where T: IComparable ( T a, T b )
    {
              if( a.CompareTo(b) < 0 )
                      return b;
              else
                      return a;
    }

    看了文章相信你会明白怎么回事
    http://msdn.microsoft.com/en-us/magazine/cc163683.aspx

    对 .NET感兴趣的同学,可以好好看看

  • 相关阅读:
    自定义checkbox样式
    自定义select样式
    jsonp
    I/O复用 poll简介
    DOS和DDOS攻击
    TCP状态转换图解析
    Makefile入门
    I/O复用select 使用简介
    替换文本内容
    share memory
  • 原文地址:https://www.cnblogs.com/caoshenghe/p/1574036.html
Copyright © 2011-2022 走看看