C#has-与嵌套类的关系 我是一个C++开发者,学习C语言,我需要一个C类来拥有两个代表“机器人”的成员。机器人需要能够访问C的私有成员,而不需要在其他地方使用。在C++中,我会使用“朋友”关键字,但我不知道该怎么做。我想做这样的事情: class C { private Member mem; private Robot bot; private class Robot { C owner; public void function() { //Robot needs to use owner.mem here, //but can't because it's private} }; }

C#has-与嵌套类的关系 我是一个C++开发者,学习C语言,我需要一个C类来拥有两个代表“机器人”的成员。机器人需要能够访问C的私有成员,而不需要在其他地方使用。在C++中,我会使用“朋友”关键字,但我不知道该怎么做。我想做这样的事情: class C { private Member mem; private Robot bot; private class Robot { C owner; public void function() { //Robot needs to use owner.mem here, //but can't because it's private} }; },c#,inheritance,C#,Inheritance,问题是,我不知道如何说一个机器人属于C的一个实例,并且可以访问它的成员。没有直接的等价物friend——可用的最近的(而且它不是很近)但它打破了类之间的关系,破坏了OO语言的一些基本属性 我想到的唯一体面的解决方案是发明一个接口ICClass,它只公开公共方法,并让工厂返回ICClass接口 这涉及到相当多的繁琐——在接口中再次公开所有自然公共属性。一种方法是将外部类的实例作为引用传递给内部类的构造函数 class C { private Member mem; private

问题是,我不知道如何说一个机器人属于C的一个实例,并且可以访问它的成员。

没有直接的等价物
friend
——可用的最近的(而且它不是很近)但它打破了类之间的关系,破坏了OO语言的一些基本属性

我想到的唯一体面的解决方案是发明一个接口ICClass,它只公开公共方法,并让工厂返回ICClass接口


这涉及到相当多的繁琐——在接口中再次公开所有自然公共属性。

一种方法是将外部类的实例作为引用传递给内部类的构造函数

class C
{
    private Member mem;
    private Robot bot;

    private class Robot
    {
        C owner;
        public Robot(C c) {owner = c;}
        public void function()
        { 
           // Robot can use owner.mem here
        }
    };
}

有大量关于此的线程:


“机器人需要在这里使用owner.mem,但不能,因为它是私有的”

我认为您需要使用继承模型来保护

class C
{
    protected Member mem;
    protected Robot bot;
}

private class Robot : C
{
   public void function() { 
      base.mem...  // here you can use the base classes mem and bot
   };
}

我不确定你在评论中想说什么,因为那是错误的
owner.mem
可以在
函数中访问。在您的情况下,机器人成员可以访问C私有成员。试试看。如果你不能让它工作,请发布异常。“但是不能,因为它是私有的”-请发布演示问题的代码(因为它在当前状态下是错误的)。评论不足以看出您的确切问题。注意:如果你来自java后台,你可以期望嵌套类可以免费引用它的父类,但是C++中没有这种情况,所以需要澄清问题。你也可以看到对C++的朋友C的等价性的SKITS回答。-这与@Mohithrivastava提到的相同:这个答案意味着
private
不可访问,这是错误的,因此答案是错误的。建议使用
protected
是更错误的解决方案。@lonewolf和@radarbob-我编辑它是为了消除关于建议
protected
的混淆, cheers@Rob是的,根据你的直觉,一开始我确实误解了-现在我已经清理了我的答案,所以它使用继承而不是嵌套在推荐的
受保护的