首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏程序员的SOD蜜

    使用表达式树,让访问者直接执行“角色”对象的方法

    以前,我们在讨论《业务分析三维度(场景+角色+时间)理论》 的软件设计的时候,对于场景中的访问者,动态附加场景许可的角色,如何通过访问者执行角色方法的问题,采用了下面的实现方式: Actor.ActAs Function(Para para); 这种方式本质上是将Actor转换成为了IRole接口的实例对象,然后进行方法访问的,但这样就暴露了角色对象,比如可以这样继续使用: IRole role=Actor.ActAs return role as T; } return null; } } 我们重点来看ActAs Actor("zhagnsan"); man.AddRole(new Animal());//为张三添加动物的本能职责 var result=man.ActAs 这里是程序输出: zhagnsan eat.rice. result:1 相比较文章开头的方式, 这里man.ActAs<IAnimal, int> 直接执行了角色对象的方法,而不给外部人员知晓zhangsan

    93870发布于 2018-02-26
  • 来自专栏程序员的SOD蜜

    逻辑式编程还有用吗?--“三维度”逻辑编程语言的设计(2)

    husband1 = new Husband(zhangsan,diaochan); diaochan.ChildrenCount = 0; diaochan.ActAs <Wife>().Child_bearing(); //生孩子 zhangsan.ActAs<Husband>().Money += zhangsan.ActAs<Worker >().Work(); zhangsan.ActAs<Husband>().Child_rearing(); //生孩子 请看上面这个代码,基本上和我们的故事“剧本”描述的一模一样 zhangsan, diaochan); context.StartContext(); //场景参与人开始扮演角色 diaochan.ActAs <Wife>().Child_bearing(); zhangsan.ActAs<Husband>().Money += zhangsan.ActAs<Worker>().Work

    5.7K20发布于 2020-09-27
  • 来自专栏程序员的SOD蜜

    Actor:人生如戏全靠演技--“三维度”逻辑编程语言的设计(3) 角色是一种特定的关系名不正言不顺角色才是真正的主人演员的天分再好的演技也需要角色好演员更需要好剧本

    } protected internal List<IRole<Actor>> Roles { get; private set; } public T ActAs Actor通过切换角色来实现不同的功能,这个可以通过Actor对象的ActAs泛型方法来切换当前Actor对象的角色。 ActAs泛型方法遍历Actor当前角色集合中所有的角色,如果找到就返回这个角色类型,找不到抛出异常,详细代码请看上面【演员的天分】。 回顾一下前面程序中Actor对象通过ActAs泛型方法切换当前角色执行角色功能的的示例代码示例,由于可以通过Actor对象来切换到拥有的角色对象,所以申明角色对象的变量都不需要了,这样能更加显示出角色谓词的强大力量 <Wife>().Child_bearing(); zhangsan.ActAs<Husband>().Money += zhangsan.ActAs<Worker>().Work

    74771发布于 2020-10-10
领券