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

时间:2015-03-19 11:58:19

标签: c# inheritance

我想知道是否可以定义只有指定类可以与之交互或看到的方法或属性。

例如:

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 或受保护的 < em> set I Thing 的方法,尽管已在范围 事情

我知道我可以在 Thing 的范围内声明 OtherThing ,然后获得权限访问受保护的项目,但我也希望这可以使用接口,其实现不能在原始接口的范围内定义,并且无论如何也不能声明受保护的方法。

这可能不是严格可行的,但我很想听到类似的方法来实现同样的目的,所以我可以自己做一些实验。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可能正在寻找C#中C ++的 friend-class 概念。 C#在类级别没有这样的功能,所以你需要找到另一种设计方案。

答案 1 :(得分:2)

当我阅读这个问题时,它感觉非常像访客模式: 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;
       }
   }

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

我真的不明白原因,所以我的例子非常人为。无论如何,您可以添加接口来抽象事物,甚至使用某种命令来传递而不是Action。但这个想法将保持不变。