c# – 如何避免重复的接口代码?

前端之家收集整理的这篇文章主要介绍了c# – 如何避免重复的接口代码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
由于接口不能包含实现,这似乎在导致从接口继承的类中的代码重复.在下面的例子中,假设,假设从Stream中读取的前10行或以上行被重复.尽量不要专注于这里的措辞,而是专注于在每个类之间创建重复代码的简单方法.

例如:

public interface IDatabaseProcessor
{
   void ProcessData(Stream stream);
}
public class sqlServerProcessor : IDatabaseProcessor
{
    void ProcessData(Stream stream)
    {
      // setting up logic to read the stream is duplicated code
    }
}
public class DB2Processor : IDatabaseProcessor
{
    void ProcessData(Stream stream)
    {
      // setting up logic to read the stream is duplicated code
    }
}

我意识到使用ProcessData的抽象基类并添加非抽象成员是一个解决方案.但是,如果我真的想真的要使用一个界面呢?

解决方法

跨接口共享代码的最佳方法是通过无状态扩展方法.您可以一次构建这些扩展,并在实现接口的所有类中使用它,而不管它们的继承链.这是.NET对IEnumerable< T>在LINQ中,取得了令人印象深刻的成果.这个解决方案并不总是可行的,但你应该喜欢它.

分享逻辑的另一种方法是创建一个内部的“助手”类.这在您的情况下看起来是正确的选择:实现可以将内部共享代码调用为助手的方法,而不需要复制任何代码.例如:

internal static class sqlProcessorHelper {
    public void StreamSetup(Stream toSetUp) {
        // Shared code to prepare the stream
    }
}
public class sqlServerProcessor : IDatabaseProcessor {
    void ProcessData(Stream stream) {
        sqlProcessorHelper.StreamSetup(stream);
    }
}
public class DB2Processor : IDatabaseProcessor {
    void ProcessData(Stream stream) {
        sqlProcessorHelper.StreamSetup(stream);
    }
}

助手类不需要是静态的:如果你的共享方法需要状态,你可以让你的帮助器成为一个普通的类,并在你想要共享代码的界面的每个实现中放置一个实例.

猜你在找的C#相关文章