Practice First

实践第一

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
昨天看了一篇文章,关于.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感兴趣的同学,可以好好看看

posted on 2009-09-25 15:14  caoshenghe  阅读(180)  评论(0编辑  收藏  举报