我知道我需要帮助的不是父母,但这是我能想到的最接近的词来描述这种情况。
这不是我正在使用的实际代码。
我的MainClass
包含对象ObjectA
。
class MainClass
{
public int mode = 0;
ObjectA obj = new ObjectA();
}
我需要从mode
对象访问ObjectA
变量。这可能吗?我觉得如果我至少可以在MainClass
obj
中调用一个方法,那么我将会全部设定。此外,我知道在这种意义上调用MainClass
父母是不正确的,这里MainClass
和obj
的正确用语是什么。
答案 0 :(得分:4)
假设您能够更改MainClass
,我可以考虑两个选项:
MainClass
实例时添加对ObjectA
的引用。使用参考:
class MainClass
{
public int mode = 31416;
ObjectA obj;
public MainClass()
{
obj = new ObjectA(this);
}
public int GetMainClassMode()
{
return mode;
}
public void Test() {
Console.WriteLine("Calling test method inside obj");
obj.Test();
}
}
class ObjectA {
MainClass parent = null;
public ObjectA(MainClass parent)
{
this.parent = parent;
}
public void Test()
{
if (parent != null)
{
Console.WriteLine("Getting mode from 'parent' MainClass");
Console.WriteLine(string.Format("Mode = {0}", parent.GetMainClassMode()));
}
}
}
使用活动:
class MainClass
{
public int mode = 31416;
ObjectA obj = new ObjectA();
public MainClass()
{
obj.ValueReturnEvent += HandleValueReturnEvent;
}
public int GetMainClassMode()
{
return mode;
}
// Handle event, return data
private int HandleValueReturnEvent(object sender, EventArgs e)
{
return mode;
}
public void Test() {
Console.WriteLine("Calling test method inside obj");
obj.Test();
}
}
class ObjectA {
// delegate
public delegate int ReturnValueEventHandler(object sender, EventArgs args);
// event
public event ReturnValueEventHandler ValueReturnEvent;
public void Test()
{
// make sure at least one subscriber
if (ValueReturnEvent != null)
{
// note the event is returning a value
var myValue = ValueReturnEvent(this, null);
Console.WriteLine("Getting mode from 'parent' MainClass");
Console.WriteLine(string.Format("Mode = {0}", myValue));
}
}
}
在这两种情况下,您都会获得此输出:
Calling test method inside obj
Getting mode from 'parent' MainClass
Mode = 31416
答案 1 :(得分:0)
你必须把事情联系起来,让孩子知道父母为此工作。像这样:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 123) {
if (resultCode == Activity.RESULT_OK){
// the code you want to execute
}
}
}
答案 2 :(得分:0)
即使你得到了答案,你也可以简单地将它注入你的ObjectA
...有一个带有int的构造函数,当你创建对象时,传递mode
in并将其保存在该对象中。
我发现对象在其范围内使用它需要的任何东西,而不是访问父级来请求变量,这样更清楚。
我不是说它可能不需要,只是另一种想法。
答案 3 :(得分:-1)
您将字段mode
公开,因此我认为使用类MainClass
的人可以更改此字段。
让我们假设程序看起来像这样。
class Program {
var main = new MainClass();
main.mode = 1;
}
您的obj
字段属于私有字段,因此Program
无法访问该字段。
因此,当有人更改字段mode
时,ObjectA
应获取字段mode
的新值。
可能的解决方案:
class ObjectA {
public int Mode { get; set; }
}
class MainClass {
private obj = new ObjectA();
public int Mode {
get { return this.obj.Mode; }
set { this.obj.Mode = value; }
}
}
如果字段mode
属于MainCalss
,则还有另一种选择。
class ObjectA {
private int mode;
public ObjectA(int mode) {
this.mode = mode;
}
// you can create property instead of method
// I'm not sure how you use this variable, so I just added set method
public void SetMode(int mode) {
this.mode = mode;
}
}
class MainClass {
private int mode = 0;
private obj = new ObjectA();
public int Mode {
get { return this.mode; }
set {
this.obj.SetMode(value);
this.mode = value;
}
}
}