【问题标题】:Can I integrate container class methods with those of a generic interface?我可以将容器类方法与通用接口的方法集成吗?
【发布时间】:2011-09-27 15:11:29
【问题描述】:

我有一个容器类Foo<TInterface>,它在其构造函数中接受一个任意接口类型参数和一个字符串“strCode”。

在实例化 Foo 时,strCode 通过 CSharpCodeProvider 编译,通过反射,适当的类型位于新编译的代码中,然后转换为 TInterface 类型并在 Foo 中提升到属性 TInterface 栏。

这工作正常,客户端可以访问 foo.bar 没问题。但是,Foo 还包含(在其他方法中)一个名为 Recompile 的方法,它基本上以上述方式获取并编译一个新的代码字符串。这也可以正常工作,但这意味着客户端最终会得到一个 Foo API,其中方法组织如下:

foo.bar.MakeCoffee
foo.bar.DoMagic
foo.Recompile

我更喜欢:

foo.MakeCoffee
foo.DoMagic
foo.Recompile

换句话说,我想返回一个对通用接口方法和 Foo API 方法都具有顶级访问权限的类实例。

理想情况下,返回 Foo<TInterface> 的实例会很好,但我知道 C# 泛型不允许这样做。如果需要,我很乐意发布代码,但首先要确保由于 C# 的静态类型性质,我没有在错误的树上吠叫。

【问题讨论】:

  • 什么版本的 C#?您可以使用 C# 4 中新的动态语言支持来完成这项工作。
  • 如果可能的话,我宁愿使用 C# 3.5,如果仅仅是因为(根据我的经验)这个版本的 CSharpCodeProvider 的编译速度比 4.0 快 15%。但是,如果不是太复杂,我会热衷于询问动态解决方案。您对我应该看哪里或应该采取的一般方法有什么建议吗?

标签: c# generics reflection interface


【解决方案1】:

我认为你必须使用像 Castle Dynamic Proxylinfu 这样的代理库。

您要达到的目标是什么?你想做AOP吗?

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多