.NET 2.0的泛型,是在何时进行建造(Construct)?编译器在何时知道泛型的类型参数,何时不知道?不妨先来思考一下这几个Quiz:
Quiz 1:写出以下代码的输出
class Program
...{
static void Main(string[] args)
...{
A<int> a = new A<int>();
a.InternalCall(12);
}
}
![]()
class A<T>
...{
public void InternalCall(T obj)
...{
Test(obj);
}
![]()
public void Test<U>(U obj)
...{
Console.WriteLine("U");
}
![]()
public void Test(int obj)
...{
Console.WriteLine("int");
}
}
到底哪个重载会被调用呢?仅从类的里面看,似乎只有一个选择;而在调用方看,却存在两个选择……
Quiz 2:写出以下代码的输出
class Program
...{
static void Main(string[] args)
...{
A<int> a = new A<int>();
a.Test(12);
}
}
![]()
class A<T>
...{
public void Test(T obj)
...{
Console.WriteLine("T");
}
![]()
public void Test(int obj)
...{
Console.WriteLine("int");
}
}
恩……这是个最奇特的例子,当你输入代码时,IDE会告诉你有两个一模一样的重载函数,那么会调用哪一个呢?
Quiz 3:写出以下代码的输出
当你做出这些题后,你能想到这些特性可以用来编写什么样的程序吗?class Program
...{
static void Main(string[] args)
...{
A<int> a = new A<int>();
a.Test(12);
a.Test(12.0);
}
}
![]()
class A<T>
...{
public void Test<U>(U obj)
...{
Console.WriteLine("U");
}
![]()
public void Test(T obj)
...{
Console.WriteLine("T");
}
}
| 共分1页 [1] |
关于网站 | 客服中心 | 服务条款 | 友情链接 | 广告联系 | 本站历程 | 网站导航
吉ICP备05000107号