一、前言
曾经有人说,学会编程后是不缺对象的!当年就是因为这句话学了编程,之后我才明白,此对象非彼对象!后来又仔细想想,这句话也没错,现在天天面向对象编程,没对象了就创建一个,确实是不缺对象哈,当年那哥们诚不欺我!那说到面向对象,就少不了三大特性:封装、继承、多态,经常面向对象编程的应该都知道怎么实现这三大特性,在ILRuntime中同样可以用C#来实现这三大特性,但是ILRuntime中的继承又有点不一样,至于哪里不一样,咱接着往下看!
二、传统的继承方式
按照传统的方式,需要先定一个父类,然后再定义一个子类来继承父类,继承后子类就可以使用或重写父类的属性或方法等。
所以我们先在热更工程中创建一个父类(Father):
这个父类(Father)派生了一个子类(Son),子类(Son)继承了父类(Father),子类重写一下父类的方法:
接下来在主工程实例化这两个类,看看是不是能正常运行(主工程加载和运行热更代码请看上一篇文章!)
Unity 运行后输出:
看到这里你可能会觉得这里的继承和以往写继承的方式看起来也没啥不一样呀?
确实如此,如果继承和派生都写在热更工程中是没啥不一样的,那我们就换种思路,如果我们在热更工程中继承主工程的父类,那这样是不是也能直接实现呢?
三、跨域继承
我们把父类(Father)的代码移动到主工程中,子类(Son)的代码还是放在热更工程,这样看看有没有区别?
代码放好后,运行起来就会看到一个大大滴报错!儿子(Son)找不着爹(Father)了,这可咋办呢?亿万家产说没就没!
不要慌,今天咱就是来处理这个继承问题的!一个在主工程,一个在热更工程,想要实现这两者的继承,从专业的角度来讲,这个就叫做“跨域继承”!
从报错信息中可以得知是少了一个父类(Father)的适配器才报错的,也就是说想实现跨域继承,就得写适配器,那这个适配器怎么写呢?
四、继承适配器
官方给适配器提供了一个模板,我们通过这个模板去创建对应的适配器就行了
我们通过ILRuntime提供的Api来编写适配器代码文件,把这个功能写成菜单按钮方便在编辑器调用:
写好后就可以在菜单栏看到我们创建的菜单按钮了,点击一下就能创建适配器了
当我们点击这个按钮后,就会在”Assets/Adapter”文件下创建了一个FatherAdapter.cs文件
这是根据官方的模板生成的适配器,有时候可能无法完全应付所有情况,如果遇到问题了就手动修改下这个适配器文件即可!
到这里可别着急运行,还有最重要的一步需要做
需要把创建后的适配器注册一下,不然还是会报错的!
到这里我们就顺利实现跨域继承了。
运行后成功输出:
五、总结
热更工程的类去继承主工程的类这称为“跨域继承” 实现跨域继承需要写适配器 写好适配器后需要先注册一下 在热更工程中实现跨域继承,不能同时继承或实现1个以上主工程的类或接口 跨域继承在ILRuntime中比较消耗性能,尽量避免跨域继承
注意:本文归作者所有,未经作者允许,不得转载