如何隐藏整个班级?

时间:2012-05-22 07:58:02

标签: c# class inheritance hide .net-assembly

让我们想象一下:

// assembly 01

abstract class Foo
{
    abstract void Bar();
}
class AdvancedFoo : Foo
{
    override void Bar() { base.Foo(); ... }
}
sealed class SuperiorFoo : AdvancedFoo
{
    override sealed void Bar() { base.Foo(); }
}

然后我想从我的 02 asm中引用该程序集 01 并替换中间基类(并且只有它),以便{{1}的实例他们的行为就像他们在集会 02 SuperiorFoo中一样。

AdvancedFoo

如果 02 程序集不重写// assembly 02 class AdvancedFoo : Foo { override void Bar() { base.Foo(); ... } } 类声明,有没有办法做到这一点?

SuperiorFoo

2 个答案:

答案 0 :(得分:2)

不是你不做的方式,但你可以使用组合而不是继承来解决你的问题:

interface IFoo
{
    abstract void Bar();
}
class AdvancedFoo : IFoo
{
    override void Bar() { base.Foo(); ... }
}
sealed class SuperiorFoo : IFoo
{
    private IFoo _fooImplementer;

    public SuperiorFoo()
    {
        _fooImplemnter = new AbstractFoo();
    }

    public SuperiorFoo(IFoo fooImplementer)
    {
       _fooImplementer = fooImplementer;
    }

    void Bar() { _fooImplementer.Foo(); }
}

要从第二个程序集调用,您将使用第二个构造函数,传递新的'advancedfoo'类的实例。

答案 1 :(得分:1)

类型转发可以提供帮助:Type Forwarding in the Common Language Runtime