.NET 2.0的泛型,是在何时进行建造(Construct)?编译器在何时知道泛型的类型参数,何时不知道?不妨先来思考一下这几个Quiz:

Quiz 1:写出以下代码的输出

.NET 2.0 泛型Quizclass Program { .NET 2.0 泛型Quizstatic void Main(string[] args) { .NET 2.0 泛型Quiz A<int> a = new A<int>(); .NET 2.0 泛型Quiz a.InternalCall(12); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz} .NET 2.0 泛型Quiz.NET 2.0 泛型Quizclass A<T> { .NET 2.0 泛型Quizpublic void InternalCall(T obj) { .NET 2.0 泛型Quiz Test(obj); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz.NET 2.0 泛型Quizpublic void Test<U>(U obj) { .NET 2.0 泛型Quiz Console.WriteLine("U"); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz.NET 2.0 泛型Quizpublic void Test(int obj) { .NET 2.0 泛型Quiz Console.WriteLine("int"); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz}

到底哪个重载会被调用呢?仅从类的里面看,似乎只有一个选择;而在调用方看,却存在两个选择……

Quiz 2:写出以下代码的输出

.NET 2.0 泛型Quizclass Program
{ .NET 2.0 泛型Quizstatic void Main(string[] args) { .NET 2.0 泛型Quiz A<int> a = new A<int>(); .NET 2.0 泛型Quiz a.Test(12); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz} .NET 2.0 泛型Quiz.NET 2.0 泛型Quizclass A<T> { .NET 2.0 泛型Quizpublic void Test(T obj) { .NET 2.0 泛型Quiz Console.WriteLine("T"); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz.NET 2.0 泛型Quizpublic void Test(int obj) { .NET 2.0 泛型Quiz Console.WriteLine("int"); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz}

恩……这是个最奇特的例子,当你输入代码时,IDE会告诉你有两个一模一样的重载函数,那么会调用哪一个呢?

Quiz 3:写出以下代码的输出

.NET 2.0 泛型Quizclass Program { .NET 2.0 泛型Quizstatic void Main(string[] args) { .NET 2.0 泛型Quiz A<int> a = new A<int>(); .NET 2.0 泛型Quiz a.Test(12); .NET 2.0 泛型Quiz a.Test(12.0); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz} .NET 2.0 泛型Quiz.NET 2.0 泛型Quizclass A<T> { .NET 2.0 泛型Quizpublic void Test<U>(U obj) { .NET 2.0 泛型Quiz Console.WriteLine("U"); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz.NET 2.0 泛型Quizpublic void Test(T obj) { .NET 2.0 泛型Quiz Console.WriteLine("T"); .NET 2.0 泛型Quiz } .NET 2.0 泛型Quiz}
当你做出这些题后,你能想到这些特性可以用来编写什么样的程序吗?


2005.11.08  来自:Csdn dotnet blog 专家群  ninputer

相关文章:

  • 2021-07-02
  • 2021-12-06
  • 2022-02-13
猜你喜欢
  • 2021-10-25
  • 2021-11-05
  • 2021-07-24
  • 2021-06-01
  • 2022-01-18
  • 2021-09-25
相关资源
相似解决方案