动态类型Dynamic

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打交道就会有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值