diff --git a/HowToUseWeaklyScripts.md b/HowToUseWeaklyScripts.md index b25c9a0..eda7a11 100644 --- a/HowToUseWeaklyScripts.md +++ b/HowToUseWeaklyScripts.md @@ -29,4 +29,19 @@ 单例对象允许进行嵌套,配合第二点,单例可以直接套娃式递增,配合第四点,单例将不仅限于隐式生成单个对象。 超级单例支持动态的切换单例对象,并将这个新的单例呈现在全局;比如希望创建一个唯一的对话框,并立刻将这个对话框作为前台提交到全局,使用完毕后再回到默认单例上。 - +## [软接口 SoftInterface](../wiki/SoftInterface) + +软接口利用反射完成对目标字段,属性,方法的识别。 +如果这些对象的名称都几乎一致,但由于各种原因,导致没有或无法使用同一个基类来控制这些字段;比较常见的是一些繁琐,数据量,接口数量庞大的项目中,如果反复用继承去控制这些相似的字段,那么代码复杂度反而会上升,使用接口有可能会导致某些情况下字段被分隔开。 +简单来说就是常规用法下,继承和接口都会有颗粒度控制不够精细的问题。 +而使用反射,特别是一个用法简单的反射是比较好的。 + +1. 访问字段或属性 + 在希望访问的接口实例上使用 `GetSoftInterface` 来访问特定名称的成员,如果没有这个成员,那么会返回空,如果有,那么方法的 `out object value` 会返回这个值。你也可以使用 `GetSoftInterface` 来访问,这样返回的值会先尝试转为 T 类型,如果转换失败,也会返回false,表示返回类型限定错误。 +2. 批量访问字段或属性 + 当接口实例是一个数据集合时,可以使用 `GetSoftInterfaces` 来访问它们,这会直接将里面特定名称的成员输出为新的枚举器集合。 +3. 访问方法 + 在被调用方法的实例上使用 `InvokeSoftMethod` 来调用指定名称的方法,或使用 `MacroReflection.InvokeSoftMethod` 来调用到类上的静态方法。 + 当用方法作为接口时,需要明确输入参数,输出参数,和方法名称。在软接口中,带有ref标记的参数会同时被认为是输入参数和输出参数,而out标记的参数则只被认为是输出参数,在使用类型限定时,首先需要指定函数返回值,如果是void,则直接指定后续的out参数类型即可。 + 参数类型可以是目标方法上指定类型的基类,但如果同时有多个方法的参数与指定名称匹配,则会返回多个匹配对象,但默认只会调用找到的第一个方法。 +