我正在考虑将C用于个人项目.我想让它平台独立(不需要Mono,因为一些平台还不支持它),这就是为什么我考虑C.
但我有一个疑问.我喜欢C#的属性,我想知道我是否可以在C中使用类似的东西.
此外,是否可以使用装饰图案?
编辑:我现在考虑其他可能性或近似值,即这个问题.在运行时将附加行为附加到类的一些方法.
解决方法
在大多数任何OO语言中,为了“在运行时附加附加行为”,我建议使用
Strategy设计模式 – 将类(和/或其实例)保留(通过C中的指针,其他语言的[可重复]参考) )一个称为“策略接口”的合适的接口/抽象类的实例(有一种方法[在C中虚拟的,非最终的,具有最终的语言等等 – IOW,可覆盖的方法! – )]可扩展性点),并且通常提供getter和setter方法(或属性或适用于特定语言的任何方法)来访问和更改该实例.
最后,类或实例必须通过其持有的策略接口实例的方法来委派所有适当的功能.
我经常推荐这种“高仪式”的方法(用于这个特定目的),即使是动态语言(如Python或Ruby),这也将允许通过鸭子打字进行更多的非正式方法,以及类的对象能够直接进入内部另一个 – 这样的动态能力一般来说是非常有用的,但是对于这个具体目的(正如我想到的,在运行时改变一个类的行为)更加高度的架构和控制的方法,在我的经验中,导致更好的维护和更清晰代码(这是有争议的:即使在这样的情况下,动态语言社区中的许多开发人员也可以使用“猴子补丁”方法,但动态语言(主要是Python)的十几年成功的开发实践使我倾向于其他方式).
在适当的情况下,您可以通过各种方式修改基本的策略DP方法;例如,当可修改的功能整齐地整合到几个凝聚的群体中时,最好将“战略”对象“分解”成几个简单而一致的方法(DrawingStrategy,PersistenceStrategy,BusinessRulesStrategy等).
这种整体方法并不代替执行正确的分析和因此正确的设计,因为它不允许沿着原来不被考虑的轴的类功能的扩展;相反,该方法旨在构建一个精心设计的设计的正确方法,以良好控制的方式为可扩展性提供“钩子”.如果出现新的考虑,可能需要迭代和完善课堂设计来涵盖这些新想法.但是,在任何丰富复杂的现实世界项目中,迭代开发(包括对原始设计的调整和扩展)都是不可避免的 – 策略DP只是您的一个箭头,以帮助使流程更有序和有效.