我知道我需要帮助的不是父母,而是我能想到的最接近的词来描述这种情况。
这不是我正在使用的实际代码。
我有MainClass
包含对象ObjectA
。
class MainClass
{
public int mode = 0;
ObjectA obj = new ObjectA();
}
我需要从
mode
对象访问ObjectA
变量。这可能吗?我觉得如果我至少可以从MainClass
调用obj
中的方法,我将被全部设置。我也知道在这种意义上称MainClass
为父母是不正确的,对于MainClass
和obj
来说正确的术语是什么。 最佳答案
假设您可以更改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
关于c# - 从不同范围运行方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39216920/