public class Student {
public void Say() {
Console.WriteLine("I'm student");
}
}
public class Teacher {
public void Speek() {
Console.WriteLine("I speek English");
}
}
public static dynamic Getperson(int i) {
if (i == 0)
return new Student();
if (i == 1)
return new Teacher();
return null;
}
dynamic person = Getperson(0);
Student stu = new Student();
stu.Say();//编译时会报错,因为student没有say函数
Stu = new Teacher();//编译时报错,因为stu类型与teacher类型不符合。
person.Say();
person = Getperson(1);
person.Speek();
person.Say(); //编译通过运行时会报错,这时候的person是teacher,没有say函数
person = Getperson(4);
person.Say(); //编译通过运行时会报错,这时候person是null
Console.Read();
总结:dynamic类型实际上就是让C#允许将类型检查推迟到运行时,这跟脚本语言很像。dynamic引用了一个编译器不知类型的对象,但是程序员知道其类型和内部方法,就直接在代码中绕过编译器的检查使用这个对象。但是使用的过程中不能保证dynamic对象总是自己设想中的那个类型。
dynamic一般用在什么地方?
当代码中需要调用COM或者C++的DLL的对象的时候,用dynamic来引用这些对象可能会更方便些。
这是高级技术,对我来讲目前还用不上,大概多跟COM打交道就会有用。