我想做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
}
}
我看了几个类似的问题,但没有一个真正告诉你如何解决这个问题。试图用受保护的方法装饰一个类首先做错了吗?
答案 0 :(得分:5)
受保护的方法仅对子类可见。如果Foo
和Foo2
位于同一个程序集中,您可以将Foo.Bar
内部改为:
public class Foo
{
internal void Bar() { ... }
}
答案 1 :(得分:0)
唯一的区别是protected
方法可以在派生类中使用,private
方法不能。所以这不是对与错的问题,而是你是否需要这种功能。
答案 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
}
}