我在C#中创建一个小型库,我希望让A类能够修改B类的数据成员,其中A和B类存在于同一名称空间中,C.D。虽然我希望在命名空间C中的E类无法访问B的数据成员,但这不是一个需要解决的问题。
namespace C.D { class B { modifier int a, b; public B() { } } class A { public A() {} public B DoStuff() { B b = new B(); b.a = 1; b.b = 2; return b; } } } namespace C { class E { static void Main(String[] args) { A a = new A(); B b = a.DoStuff(); } } }
在我上面的main方法中,我希望命名空间C.D中的每个类都能够改变B类对象的数据成员,尽管在C.D命名空间之外没有任何内容能够修改B类对象数据成员。
有没有办法通过更改命名空间结构,修饰符或实现特定的设计模式来实现这一目标?
提前谢谢大家。 :)
答案 0 :(得分:2)
如果您愿意将C.D中的相关类移动到单独的程序集中,则可以使用“内部”访问修饰符。
namespace C.D
{
class B
{
internal int a;
internal int b;
public B()
{
}
}
}
答案 1 :(得分:0)
实现这一目标的一种方法是:
将A类定义移到B类(将其嵌套在class B { ... }
内)
制作B类字段(a
和b
)private
。
即
namespace C.D { class B { private int a, b; public B() { } class A { public A() { } public B DoStuff() { B b = new B(); b.a = 1; b.b = 2; return b; } } } } namespace C { class E { static void Main(String[] args) { A a = new A(); B b = a.DoStuff(); } } }
实现此目的的另一种方法是创建B类的字段protected
,然后使所有应该访问B类字段的类派生自B类。这样您就不需要在Class中嵌套A类B.即
namespace C.D { class B { protected int a, b; public B() { } } class A : B { public A() {} public B DoStuff() { B b = new B(); b.a = 1; b.b = 2; return b; } } } namespace C { class E { static void Main(String[] args) { A a = new A(); B b = a.DoStuff(); } } }