【问题标题】:Passing data from one instance of a class to another instance of a class in C#在 C# 中将数据从一个类的一个实例传递到一个类的另一个实例
【发布时间】:2013-12-29 16:23:52
【问题描述】:

我正在尝试将数据从一个类的一个实例传递到一个类的另一个实例 - 即从另一个类调用属于一个类的方法(非静态)。

为了简单起见,我将代码在这里编写,但原理还是一样的。

我们的第一个类将被称为 class1,我们的第二个类将被称为 class2Class1 将尝试在 class2 中调用一个名为 myMethod 的方法,该方法接受参数:int i

代码如下:

namespace myNamespace
{

    static void Main()
    {
        Class1 c1 = new Class1();
        Class2 c2 = new Class2();
    }
    public class Class1
    {
        public Class1()
        {
            class2.myMethod(5);
        }
    }

    public class Class2
    {
        private int myInt;
        public myMethod(int i)
        {
            myInt = i;
        }
    }
}

现在我可以在代码中看到一些明显的问题。首先,Class1 没有 Class2 的实例来将数据传递给......但是由于我的程序的性质,这必须是它的完成方式。 (Class2 运行一个循环,这意味着除此之外没有任何代码运行

对此的一种可能解决方法是将 myMethod 设置为静态,但随后会出现将数据从静态方法传递到非静态变量的问题。

我不太了解接口,这可能是最好的解决方法吗?我还认为我可以将数据从 class1 写入文件,然后 class2 在循环期间从文件中读取和删除数据......但这似乎有点乏味。

那么我应该如何传递数据/调用方法?

感谢您的帮助。

【问题讨论】:

  • 听起来您需要将 Class2 的实例传递给 Class1 的构造函数。
  • (Class2 运行一个循环,意味着除了它之外没有代码运行) 这似乎是给出正确答案的关键点。当这个类实例进入循环?如果超出它的代码没有运行,您如何期望代码的其他部分工作?多线程?你能更好地解释一下这个第二类的用法吗?
  • 所以第二个类运行 openGL (Tao, GLUT) 并在其中调用主循环(在每一帧上渲染)。它不在不同的线程中......我觉得多线程可能是程序的下一步

标签: c# static non-static


【解决方案1】:

您可以尝试像这样更改 Class1 构造函数:

public Class1(Class2 c2)
{
    c2.myMethod(5);  
}

然后将您的 Class2 实例传递给您的 Class1 构造函数:

Class2 c2 = new Class2();
Class1 c1 = new Class1(c2);

【讨论】:

  • 但是我有一个问题是我不能在 Class1 之前创建 Class2 ...(原因是它是一个 opengl 程序,并且 Class2 包含循环含义,据我所知,没有代码过去开始循环运行)
【解决方案2】:

我不太了解接口,这可能是最好的解决方法吗?

不,一点也不,接口在这里无关。

我还认为我可以将 class1 中的数据写入文件,然后让 class2 在循环过程中读取并删除文件中的数据……但这似乎有点乏味。

嗯,我不太明白。

那么我应该如何传递数据/调用方法?

在 OOP 中,您有两种调用方法的可能性:

  1. 如果方法不是静态的,则创建类的实例并在此实例上调用方法
  2. 将方法设为静态,然后无需实例即可直接调用它

【讨论】:

    【解决方案3】:

    我不确定我是否理解您的要求,但最简单的方法是将Class2 的实例传递给Class1 的构造函数:

    public Class1(Class2 c2)
    {
        c2.myMethod(5);  
    }
    

    然后你可以如下调用你的类:

    Class2 c2 = new Class2();
    Class1 c1 = new Class1(c2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2023-02-08
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      相关资源
      最近更新 更多