C#从一个类而不是另一个类访问方法

C#从一个类而不是另一个类访问方法,c#,methods,private-members,C#,Methods,Private Members,如果这个问题以前已经解决了,请提前道歉 我正在C#中创建一个小型库,希望类a能够修改类B的数据成员,其中类a和B存在于同一名称空间C.D中。这不是一个要完成的问题,尽管我希望名称空间C中的类E不能访问B的数据成员 namespace C.D { class B { modifier int a, b; public B() { } } class A

如果这个问题以前已经解决了,请提前道歉

我正在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(); } } } 命名空间C.D { B类 { 整型修饰语 A. B 公共图书馆B() { } } 甲级 { 公共A(){} 公共B DoStuff() { B=新的B(); b、 a=1;b.b=2; 返回b; } } } 命名空间C { E类 { 静态void Main(字符串[]参数) { A=新的A(); B=a.DoStuff(); } } } 在我上面的主方法中,我希望命名空间C.D中的每个类都能够修改B类对象的数据成员,尽管C.D命名空间之外的任何类都不能修改B类对象的数据成员

有没有办法通过更改名称空间结构、修饰符或实现特定的设计模式来做到这一点

提前谢谢大家。:)

如果愿意将C.D中的相关类移动到单独的程序集中,可以使用“内部”访问修饰符

namespace C.D
{
    class B
    {
        internal int a;
        internal int b;

        public B()
        {
        }
    }
}

实现这一目标的一种方法是:

  • 将类A的定义移动到类B中(将其嵌套在
    类B{…}
    中)

  • 使B类字段(
    a
    B
    私有化

  • i、 e


    非常感谢你。我仔细阅读了内部修饰符,希望有一种不同的方法来解决我的问题。我想我只是不能偷懒:)不客气。还有其他的方法。例如,您可以为类B创建一个公开必要属性/方法的接口。需要处理内部细节的类将以某种方式提供具体实现(或其他接口)。但这种重组显然需要做更多的工作。 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(); } } } 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(); } } }