使用受保护的方法装饰类

时间:2014-02-08 15:53:41

标签: c# design-patterns

我想做here描述的完全相同的事情,但是在C#中。

public interface IFoo { void DoSomething(); }

public class Foo : IFoo
{
    public void DoSomething() {...}
    protected void Bar() {...}
}

public class Foo2 : IFoo
{
    private readonly Foo _foo;

    public Foo2 (Foo foo) { _foo = foo; }

    public void DoSomething() {...}

    protected void Bar()
    {
        _foo.Bar(); // cannot access Bar() from here
    }
}

我看了几个类似的问题,但没有一个真正告诉你如何解决这个问题。试图用受保护的方法装饰一个类首先做错了吗?

3 个答案:

答案 0 :(得分:5)

受保护的方法仅对子类可见。如果FooFoo2位于同一个程序集中,您可以将Foo.Bar内部改为:

public class Foo
{
    internal void Bar() { ... }
}

答案 1 :(得分:0)

唯一的区别是protected方法可以在派生类中使用,private方法不能。所以这不是对与错的问题,而是你是否需要这种功能。

See this SO answer for more clarification

答案 2 :(得分:0)

你可以制作中间类FooInternal:

public interface IFoo { void DoSomething(); }

public class Foo : IFoo
{
    public void DoSomething() {}
    protected void Bar() {}
}

public class FooInternal : Foo
{
    internal void Bar()
    {
        base.Bar();
    }
}

public class Foo2 : IFoo
{
    private readonly FooInternal _foo;

    public Foo2(FooInternal foo) { _foo = foo; }

    public void DoSomething() {}

    protected void Bar()
    {
        _foo.Bar(); // can access Bar() from here
    }
}