我有以下代码:
class A
{
public C GetC()
{
return new C();
}
}
class B
{
//has access to A but can not create C. Must ask A to create C.
private void method()
{
A a = new A();
C c = a.GetC();//Ok!
C c2 = new C();//Not allowed.
}
}
class C
{
}
应该在C上使用哪些访问修饰符,因此只能通过A访问? (只有A类知道如何正确初始化C类) 或者有更好的解决方案吗?
答案 0 :(得分:2)
如果你在C中创建一个嵌套类,它应该可以工作。
public class B
{
//has access to A but can not create C. Must ask A to create C.
private void method()
{
var a = new C.A();
var c = a.GetC();//Ok!
var c2 = new C();//Not allowed.
}
}
public class C
{
private C()
{
}
public class A
{
public C GetC()
{
return new C();
}
}
}
答案 1 :(得分:0)
从C继承A,并使C的构造函数受到保护 编辑 - “因为受保护的成员无法通过限定符访问”,错误即将到来,作为一种解决方法,将引入静态成员,它将返回实例。可以从派生中访问此受保护的成员。
class A : C
{
private C GetC()
{
C c = C.GetC();
return c;
}
}
class C
{
protected C()
{
}
protected static C GetC()
{
return new C();
}
}
答案 2 :(得分:0)
建议的方法从C继承A,并使C受保护的代码的构造方法不起作用,因为其中存在一些错误。调整后的方法代码如下:
class B
{
static void Main(string[] args)
{
A a = new A();
C c = a.GetC();
C c2 = C(); //Non-invocable member 'C' cannot be used like a method
}
}
class A : C
{
public new C GetC()
{
C c = C.GetC();
return c;
}
}
class C
{
protected C()
{
}
protected static C GetC()
{
return new C();
}
}