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的一个实例,并且可以访问它的成员。没有直接的等价物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
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是的,根据你的直觉,一开始我确实误解了-现在我已经清理了我的答案,所以它使用继承而不是嵌套在推荐的受保护的