我想知道这是否可能
我有一个程序集,其中定义了两个类。
public class Foo
{
private Bar _Bar;
public Bar get { return _Bar ?? (_Bar = new Bar(this.Context)); }
}
internal class Bar
{
public void DoSomething() { }
}
然后是一个单独的第三方程序,它做了类似的事情
public class SomeClass
{
public void ThisShouldWork()
{
Foo _Foo = new Foo();
_Foo.Bar.DoSomething();
}
public void ThisShouldNotWork()
{
Bar _Bar = new Bar();
Bar.DoSomething();
}
}
有没有办法可以停止Bar类的实例化,但允许它们通过Foo访问?
这个例子中的错误将是"属性类型Bar的可访问性低于属性Foo.Bar"
答案 0 :(得分:4)
这里有两种可能的解决方案(可能更多?)。第一个是基于我的评论:
Bar
必须是公开的,但其构造函数不是。
public class Bar
{
internal Bar() { }
public void DoSomething() { }
}
这样,Bar
只能由其父程序集中的类构建。
基于@ Sinatr评论的第二个解决方案:
将公共接口IBar添加到Bar并将其公开。
public interface IBar
{
void DoSomething();
}
internal class Bar : IBar
{
public void DoSomething() { }
}
然后相应地修改Foo
:
public class Foo
{
private IBar _Bar;
public IBar Bar { get { return _Bar ?? (_Bar = new Bar(this.Context)); } }
}