1

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

我正在用 C# 创建一个小库,并希望 A 类能够修改 B 类的数据成员,其中 A 类和 B 类存在于同一个命名空间中,CD 虽然我想要类,但这不是问题要完成E,在命名空间 C 中,不能访问 B 的数据成员。

命名空间光盘
{
    B类
    {
        修饰符 int
            一种,
            乙;

        公共 B()
        {
        }
    }

    A级
    {
        公共 A() {}

        公共 B DoStuff()
        {
            B b = 新 B();
            巴 = 1; bb = 2;
            返回 b;
        }
    }
}

命名空间 C
{
    E级
    {
        静态无效主要(字符串 [] 参数)
        {
            A a = 新 A();
            B b = a.DoStuff();
        }
    }
}

在我上面的主要方法中,我希望命名空间 CD 中的每个类都能够更改 B 类对象的数据成员,尽管 CD 命名空间之外的任何东西都不能修改 B 类对象的数据成员。

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

谢谢大家。:)

4

2 回答 2

2

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

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

        public B()
        {
        }
    }
}
于 2012-08-29T18:34:17.433 回答
0

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

  1. 将 A 类的定义移动到 B 类(将其嵌套在 中class B { ... }

  2. 制作 B 类的字段 (ab) private

IE

命名空间光盘
{
    B类
    {
        私人int a,b;

        公共 B()
        {
        }

        A级
        {
            公共 A() { }

            公共 B DoStuff()
            {
                B b = 新 B();
                巴 = 1; bb = 2;
                返回 b;
            }
        }
    }
}

命名空间 C
{
    E级
    {
        静态无效主要(字符串 [] 参数)
        {
            A a = 新 A();
            B b = a.DoStuff();
        }
    }
}

实现这一点的另一种方法是制作 B 类的字段protected,然后使所有应该有权访问 B 类字段的类都派生自 B 类。这样您就不需要将 A 类嵌套在 B 类中。即

命名空间光盘
{
    B类
    {
        受保护的int a,b;

        公共 B()
        {
        }
    }

    A类:B
    {
        公共 A() {}

        公共 B DoStuff()
        {
            B b = 新 B();
            巴 = 1; bb = 2;
            返回 b;
        }
    }
}

命名空间 C
{
    E级
    {
        静态无效主要(字符串 [] 参数)
        {
            A a = 新 A();
            B b = a.DoStuff();
        }
    }
}
于 2012-08-29T18:37:40.497 回答