gpt4 book ai didi

c# - 从不同的范围运行方法

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:58 27 4
gpt4 key购买 nike

我知道我需要帮助的不是“ parent ”,但这是我能想到的最接近描述这种情况的词。

这不是我使用的实际代码。

我有 MainClass,其中包含对象 ObjectA

class MainClass
{
public int mode = 0;
ObjectA obj = new ObjectA();

}

我需要从 ObjectA 对象访问 mode 变量。这可能吗?我觉得如果我至少可以从 obj 调用 MainClass 中的一个方法,我就万事大吉了。我也知道在这个意义上称 MainClass 为父级是不正确的,MainClassobj 的正确术语是什么。

最佳答案

假设您可以更改 MainClass,我可以想到两个选项:

  • 在创建 ObjectA 实例时添加对 MainClass 的引用。
  • 正如您在评论中所说,使用事件。

使用引用:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com