初级执事
阅读权限 2
积分 1985
侠名
UID 43
主题
帖子
精华
好友
银子
金子
贡献
威望
推广
活跃
荣耀
注册时间 2017-11-7
最后登录 1970-1-1
在线时间 小时
个人主页
|
楼主 |
发表于 2019-2-22 18:58:54
|
显示全部楼层
前文例举的第29项
AS3::作为形参的object或*型引用默认值可以设置成任意类型,如
public function func(a:*, b:* = 10, c:* = false){xxx}
C#::不支持,object形参默认值只支持null
解决:利用C#多态,将上述函数头转换为三个,分别是
void func(object a){object b = 10;object c = false;xxx}
void func(object a, object b){object c = false;xxx}
void func(object a, object b, object c){xxx}
这里有稍加注意地方。
为转码尽量可读可维护,
对普通函数可以转换为
- public virtual void testFunc(object a, object b, object c)
- {
- xxxx
- }
- public virtual void testFunc(object a)
- {
- testFunc(a, 10, false);
- }
- public virtual void testFunc(object a, object b)
- {
- testFunc(a, b, false);
- }
复制代码
虽然会牺牲执行效率(多一层堆栈),
相对的
因为查错是在C#端进行,项目上线前后也不可避免某些紧急bug时C#程序员跳过AS3转换步骤直接修改C#源码
这种写法能使其只改一个函数即可。
但是对于构造函数不支持这样的写法,
只能写成
最初的形式 |
|