两个 类 或接口之间的独占签约

Exclusive contracting between two classes or interfaces

我想知道是否可以定义一个方法或 属性 只有指定 类 才能与之交互或查看。

例如:

class Thing
{
    protected int i;
    public virtual int I
    {
        get
        {
            return i;
        }
    }
}
class OtherThing
{
    public virtual void ChangeI(Thing thing, int i)
    {
        thing.i = i;
    }
}

在这里,我希望 OtherThing 能够访问 i,或受保护的 set 方法 IThing 中,尽管定义在 Thing 的范围之外.

我认识到我可以简单地在 Thing[= 的范围内声明 OtherThing 40=],然后将有权访问受保护的项目,但是我也希望它能与接口一起使用,其实现不能在原始接口的范围内定义,并且谁不能声明受保护无论如何方法。

这可能不太可能,但我很想听听类似的方法来实现同样的事情,这样我就可以自己做一些实验。

提前致谢。

您可能正在 C# 中寻找来自 C++ 的 friend-class 概念。 C# 在 class 级别上没有这样的功能,因此您需要找到另一种设计替代方案。

当我读到这个问题时,它感觉很像一个访问者模式: http://www.dofactory.com/net/visitor-design-pattern

假设您有一位访客:

class Program
   {
       static void Main(string[] args)
       {
           var thing = new Thing();
           var otherThing = new OtherThing();
           thing.Accept(otherThing);
           Console.WriteLine(thing.I);
           Console.Read();
       }
   }

   class OtherThing
   {
       public void Change(Action<int> setI)
       {
           setI(42);
       }
   }

   class Thing
   {
       private int i;

       public int I { get { return i; } }

       public void Accept(OtherThing visitor)
       {
           visitor.Change(SetI);
       }

       private void SetI(int i)
       {
           this.i = i;
       }
   }

所以这个想法是:当你接受访问者时,你给它一个可以改变你的私人领域的代表。

我不是很明白其中的道理,所以我举的例子很假。无论如何你可以添加接口来抽象事物,甚至使用某种命令来传递而不是动作。但想法会保持不变。