在C#中的两个类之间共享私有实现

时间:2014-12-03 08:03:49

标签: c#

我正在寻找一种方法来共享两个类的实现,而不会暴露该共享的任何细节。我希望创建这个基本的类结构:

  • 公共接口MyInterface
  • class MyCommonImpl:MyInterface
  • 公共类MyImplA:MyCommonImpl
  • 公共类MyImplB:MyCommonImpl

MyCommonImpl实现了MyInterface的功能,并在MyImplAMyImplB中提供了一个抽象功能。 MyImplA的用户不应该以任何方式了解MyCommonImpl,这只是一个实施细节。

我考虑过手动编写,但这涉及复制大量代码以转发函数。这也是有问题的,因为在MyCommonImpl中实施了一些事件,其中一个参数是sender。这需要放置代理处理程序并部分重写事件。基本上,组合需要的代码多于简单地复制粘贴整个MyCommonImpl

如何在不复制大量代码的情况下完成此操作?

1 个答案:

答案 0 :(得分:0)

您可以将接口和实现移动到另一个程序集并在内部标记它们,这将隐藏MyCommonImpl的抽象功能。更进一步,您可以显式实现该程序集中的接口,以完全隐藏其来自调用者的方法,只留下MyImplA上声明为public的那些方法。

显式实现的内部强制转换虽然有点令人讨厌......

在另一个集会中:

namespace Private
{
    internal interface IMyInterface
    {
        void InterfaceMethod();
    }

    public abstract class MyCommonImpl : IMyInterface
    {
        internal MyCommonImpl()
        {
            // internal ctor to stop callers constructing
        }

        void IMyInterface.InterfaceMethod()
        {
            Console.WriteLine("InterfaceMethod");
        }

        internal abstract void CommonAbstract();
    }

    public class MyImplA : MyCommonImpl
    {
        internal override void CommonAbstract()
        {
            ((IMyInterface)this).InterfaceMethod();
            Console.WriteLine("CommonAbstract");
        }

        public void ImplAMethod()
        {
            CommonAbstract();
            Console.WriteLine("ImplAMethod");
        }
    }
}