如何为使用模块化扩展方法的类编写干净的代码?

时间:2009-06-12 20:12:59

标签: c# .net inversion-of-control extension-methods

我正在尝试做一些相当......独一无二的事情,也许有更好的方法可以做到但是...我正在做一个控制(ish)系统的反转,它使用扩展方法来启用/禁用该类的组件,所以在我进入更多细节并让您感到困惑之前,让我们看看一些代码!

using TestComponents.CommunicationProtocols.RS232; 
                                             //this brings in the 
                                             //ConnectRS232 extension method

namespace TestMeNamespace
{
    public class Test  //Although this class is defined here, we extend it above
    {
        public void Start()
        {
           this.ConnectRS232(1, 9600); //calls the ConnectRS232 extension method
        }
    }
}

简而言之,using声明将Test扩展到我们DEFINE测试的同一个文件中。 (继承也没问题)但是这有一些问题!首先,丑陋的必需品“这个”。 BLECH。其次,这是一个混乱的共同依赖系统。

这是我试图实现的目标:

  • 我想要一种方法可以轻松地将静态方法扩展到类(使用声明很好)
  • 我想简单地说明:ConnectRS232();
  • 如果我不需要,我希望不必参加部分课程。
  • 我可以使用接口继承。

请随时通过评论向我提出其他问题,但除非您有任何答案,否则请不要发布答案!

编辑:代替提出的问题,我正在我的系统中对C#脚本(www.cs-script.com)进行一些JIT编译,而且这些脚本主要是由非程序员编写的。使用真正“特殊”的专有语言编写多年的脚本。我想让事情变得简单,并且一大堆“这个”电话看起来像杂乱无章。

1 个答案:

答案 0 :(得分:1)

我不确定我是否明白这一点...

您的“扩展程序”仅限编译时间。扩展方法仅作为静态方法工作,并且由于您是在导入命名空间时构建的,因此它比任何形式的IoC更多地是编译时构造。 (扩展方法只是编译时的事情 - 它们在运行时并没有真正做任何事情。)

另外,鉴于上述声明,使用this.Method()似乎并不繁琐(这是正常使用的好习惯,这就是为什么StyleCop等工具会强制你在每个方法调用上执行此操作)。

你能给我们一个更好的例子来说明如何使用它吗?现在,它似乎是一种将代码放在两个地方而不是一个地方的方式,没有真正的好处......