【发布时间】:2011-03-01 11:00:37
【问题描述】:
我一直在玩泛型,并且看到了一些奇怪的东西。希望大家给个解释!为了让一切变得更容易,我将“问题”放在一个例子中:
namespace Lab
{
public class Animal
{
public Animal(string sound)
{
this.Sound = sound;
}
public string Sound { get; private set; }
public void Kick()
{
Printer.Print(this, Sound);
}
}
public class Dog : Animal
{
public Dog() : base("Bark, bark! I'll bite you!") { }
}
public class Printer
{
public static void Print<T>(T obj, string message)
{
System.Console.WriteLine("{0} says '{1}' \n", typeof(T).FullName.PadRight(10), message);
}
}
public static class Program
{
static void Main(string[] args)
{
Animal bird = new Animal("Tweet!");
Dog dog = new Dog();
System.Console.WriteLine("Kick bird:");
bird.Kick();
System.Console.WriteLine("Kick dog:");
dog.Kick();
System.Console.WriteLine("Print kick dog:");
Printer.Print(dog, dog.Sound);
System.Console.ReadLine();
}
}
}
所以,我的实验室里有两只动物:一只狗和一只鸟。当我“踢”那些动物时,它们会发出声音。打印机将打印声音和动物的类型。当我运行程序时,它会打印:
踢鸟: Lab.Animal 说“鸣叫!”
踢狗: Lab.Animal 说‘吠,吠!我会咬你的!'
打印踢狗: Lab.Dog 说‘吠,吠!我会咬你的!'
为什么狗的第一脚告诉我它是Lab.Animal 类型?
还有...我怎样才能让它返回Lab.Dog?
【问题讨论】:
标签: .net methods c#-2.0 generics