C#朋友类和OOP组合

Rir*_*979 12 c# oop class-design friend-class

给定包含原始数据集的类A和包含该数据的重新组织版本(GUI就绪)的类B,我想使A中的原始数据在B中可见.

显然,A类中的原始数据包含在私有成员中.我想通过使用类似于C++的朋友类方法的东西,在B中看到这些数据.

我怎么处理这个?

谢谢.

Ada*_*son 10

严格地说,您无法定义可以向其公开数据的特定类(或类列表).但是,您可以使用internal访问修饰符而不是private,这使成员可用于同一程序集中的任何类.

话虽这么说,你应该强烈考虑通过属性而不是字段来暴露这些成员(这就是我猜你正计划暴露的东西).这样做将允许类确切地定义如何将信息暴露给其他类,以及当另一个类更改数据时应该发生什么(如果有的话).


thi*_*eek 7

可能这可能对你有帮助..

public class A
{
    public A() { }

    public string AccessData(object accessor)
    {
        if (accessor is B)
            return "private_data";
        else
            throw new UnauthorizedAccessException();
    }
}

public class B
{
    public B() { }

    private void AccessDataFromA()
    {
        Console.WriteLine(new A().AccessData(this));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是实现`friend`语义的一种聪明方式.我并不总是使用`朋友',但是当我这样做时,我会使用这种访​​问模式:-) (2认同)