您的位置:首页 > 其它

动态类型Dynamic

2015-11-14 02:54 225 查看
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打交道就会有用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: