我知道我需要帮助的不是父母,而是我能想到的最接近的词来描述这种情况。

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

我有MainClass包含对象ObjectA

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

}


我需要从mode对象访问ObjectA变量。这可能吗?我觉得如果我至少可以从MainClass调用obj中的方法,我将被全部设置。我也知道在这种意义上称MainClass为父母是不正确的,对于MainClassobj来说正确的术语是什么。

最佳答案

假设您可以更改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/

10-08 23:31