gpt4 book ai didi

f# - 类型提供程序 - 我可以在编译时生成一个类型,以某种方式装饰一个类型的所有方法吗?

转载 作者:行者123 更新时间:2023-12-03 23:09:21 24 4
gpt4 key购买 nike

我已经阅读了 Type Providers 的强大功能,例如查询 JSON 文档时的静态类型,所以我可以想象我现在可以使用这项技术创建我的想法。

假设我想允许我的 TypeProvider-library Foo 的使用者一种创建类型 Bar 的方法,它的每个方法都具有以下先决条件:检查 boolean disposed 的可变状态字段,如果为真,则抛出 ObjectDisposedException。

这可能吗?如何定义这种高级类型创建器的实现?

最佳答案

几年前,Keith Battocchi 发表了一个名为 ILBuilder 的项目。 . ILBuilder 在 ILBuilder.fs 中包含一个方法类型提供者。为 mscorlib 中的类型提供方法,例如

MethodProvider.Methods.System.Console.``WriteLine : string*obj->unit`

您可以将其用作类型提供程序的起点,该类型提供程序包装来自另一个程序集的类并提供方法。

另一种选择可能是考虑 Ross McKinlay 的 Mixin Type Provider (ab) 使用 F# 的类型提供程序机制来提供元编程功能。

另一种选择可能是使用 PostSharp , Fody等做IL编织,或通过反射生成代码以构建代理类。

也就是说,摩擦最小的解决方案可能是创建一个检查处理并手动将其添加到每个成员的函数。

关于f# - 类型提供程序 - 我可以在编译时生成一个类型,以某种方式装饰一个类型的所有方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31395923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com