如何使一个类只能被另一个类访问,而没有类嵌套

本文关键字:访问 嵌套 何使一 另一个 | 更新日期: 2023-09-27 18:14:56

我给出了下面的代码示例:

public static class A
{
    private static B _b;
    public static B GetB
    {
        get
        {
            if(_b == null)
            {
                _b = B.load();
            }
            return _b;
        }
    }
    public static void Save()
    {
        if(_b == null)
        {
            _b = B.load();
        }
        _b.Save()
    }
}
public class B
{
    public string Value{ get; set;}
    public void Save()
    {
        //value is being save to somewhere
    }
    public static B load()
    {
        B b = new B();
        // .....
        //b.Value is loaded from somewhere
        // ......
        return b;
    }
}

下面是我需要解决的问题:

A.GetB.Value = "value";  // OK
B.Load().Value = "value";  // I need to prevent this

上面两行代码做了完全相同的事情,但是…

B.Load()。值应该在除A类

之外的任何其他地方不可访问。

如果有人有什么想法请告诉我。

谢谢,

Fivee

如何使一个类只能被另一个类访问,而没有类嵌套

基本上你要做的就是不要在类A中嵌套类B,并且仍然有类A对B字段的独占访问。如果A和B是独立的类,这是反对封装的。

您正在寻找朋友类。c++中允许使用这些类型的类。c#不支持友元类,与友元类最接近的是友元程序集。请看这篇文章

所以如果你真的想要这个功能,你需要像其他人建议的那样让它们嵌套。

同样,如果您最终使用嵌套类解决方案。这是处理嵌套类的私有成员只能访问其容器类的一种非常漂亮的方式。虽然有点俗气,但是。

我认为另一种解决方案可能是使B成为public类(因为它已经是),并使B.Load成为internal方法。然而,这只会在您从另一个程序集调用A.GetB时起作用(并且只计划在这种情况下)。