三十、多态性、动态类型 和 动态绑定(三)运行时 VS 编译时
2012-10-28 01:56
288 查看
因为 id类型变量中存储的物件类型 在编译的时候 是 不确定的,所以 某些检查 会被推迟 到程序执行的时候。先 思考一下 下面两行语句:
其中 物件fractionOne 属于 Fraction类型,用来代表 比例,而 setReal:andImaginary:这项措施 是 用来设定 一个复数所包含的实数 和 虚数的值的,只能 针对 代表复数的Complex类型的物件 实施。于是 当编译器 遇到 上面两行语句时,就会发出 这样的警告:
它的意思 是 Fraction类型的物件 可能无法对 -setReal:andImaginary:这项措施 作出 反应,也可以理解为 无法对 Fraction类型的物件 采取 -setReal:andImaginary:这项措施。由于 编译器 知道 变量fractionOne 存储着 Fraction类型的物件,所以 在编译的时候 编译器 就能发现 这个问题。
再 思考一下 下面两行语句:
当编译器 遇到 这两行语句时,就不会发出 任何警告了,因为 编译器 不知道 变量fractionOne当中 会存储 什么类型的物件。但是 在程序 运行的时候,才会出现 错误信息:
程序 运行的时候,运行系统 会检查 变量fractionOne中的物件 属于 什么类型。经过 检查,运行系统 发现 变量fractionOne中的物件 属于 Fraction类型,于是 运行系统 又 检查 setReal:andImaginary:这项措施 是否属于 Fraction这类物件。由于 setReal:andImaginary:这项措施 属于 Complex这类物件,而 不是 Fraction这类物件,所以 就产生了 上述的错误信息。
其中 物件fractionOne 属于 Fraction类型,用来代表 比例,而 setReal:andImaginary:这项措施 是 用来设定 一个复数所包含的实数 和 虚数的值的,只能 针对 代表复数的Complex类型的物件 实施。于是 当编译器 遇到 上面两行语句时,就会发出 这样的警告:
它的意思 是 Fraction类型的物件 可能无法对 -setReal:andImaginary:这项措施 作出 反应,也可以理解为 无法对 Fraction类型的物件 采取 -setReal:andImaginary:这项措施。由于 编译器 知道 变量fractionOne 存储着 Fraction类型的物件,所以 在编译的时候 编译器 就能发现 这个问题。
再 思考一下 下面两行语句:
当编译器 遇到 这两行语句时,就不会发出 任何警告了,因为 编译器 不知道 变量fractionOne当中 会存储 什么类型的物件。但是 在程序 运行的时候,才会出现 错误信息:
程序 运行的时候,运行系统 会检查 变量fractionOne中的物件 属于 什么类型。经过 检查,运行系统 发现 变量fractionOne中的物件 属于 Fraction类型,于是 运行系统 又 检查 setReal:andImaginary:这项措施 是否属于 Fraction这类物件。由于 setReal:andImaginary:这项措施 属于 Complex这类物件,而 不是 Fraction这类物件,所以 就产生了 上述的错误信息。
相关文章推荐
- java之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- java学习之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- java学习之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- 二十八、多态性、动态类型 和 动态绑定(一)多态性:不同的措施 共用 同一个名称
- Obj-C的多态性、动态类型和动态绑定
- 二十九、多态性、动态类型 和 动态绑定(二)动态绑定 和 id类型
- 三十一、多态性、动态类型 和 动态绑定(四)id类型 和 静态类型
- VS2012 编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?
- 三十二、多态性、动态类型 和 动态绑定(五)措施所附带的参数 和 所产生的结果类型
- VS2012 编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?
- 三十三、多态性、动态类型 和 动态绑定(六)关于物件类型的问题
- OC基础-静态类型,动态类型,编译检查,运行检查,父子类指针和对象互指17
- Obj-C的多态性、动态类型和动态绑定
- 三十四、多态性、动态类型 和 动态绑定(七)用 @try命令 处理 意外情况
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- VS2013 C#调用EXCEL 编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?
- IOS开发中的多态性、动态类型和动态绑定
- VS编译时,运行库类型说明
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- 用VS 2008 编译运行WxWidgets