【问题标题】:Does a Form work like a pointer?表单是否像指针一样工作?
【发布时间】:2011-11-06 12:15:02
【问题描述】:

今天我尝试创建一个可重用的框架,我没有问题...我创建了一个包含 Game 类的新文件“Game.cs”:

class Game
{
    Form Form;

    public Game(Form Form, int Width, int Height)
    {
        //Set Form
        this.Form = Form;
        this.Form.MaximizeBox = false;
        this.Form.FormBorderStyle = FormBorderStyle.Fixed3D;
        this.Form.Size = new Size(Width, Height);
    }
}

然后我使用 VisualStudio 将此文件添加到一个新的表单项目 Framework_Demo 中,其中包含以下内容:

namespace Framework_Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Here I created a new Object game using class Game
            Game game = new Game(this, 600, 600);
        }
    }
}

也许这很简单,我的问题可能已经过时了,但是为什么当我调试 Framework_Demo 时出现他的表单而且还出现我在的构造函数中设置的属性Game 上课?这不是问题,但我想知道当我设置时会发生什么:this.Form = Form它真的像指针一样工作吗?有人可以向我解释这种行为吗?谢谢!

【问题讨论】:

  • 是的,Form 是一个引用类型。我要补充一点,虽然有一个带有Form 参数的Game 类并不是一个很好的设计。您的 UI 将与 Game 类紧密耦合,您最终会将 Form 中的几乎所有内容都公开以便可以对其进行操作,并且您的 Game 类几乎肯定会最终成为巨大而且做得太多。

标签: c# winforms pointers


【解决方案1】:
class Game
{
    Form Form;
}

这里的Form 字段只是对另一个表单的引用,您可以在Game 类的构造函数中获得该引用。通常这样做是为了在子表单中保留对所有者表单的引用。在构造函数中设置Form 属性时,实际上是在修改所有者表单。

【讨论】:

    【解决方案2】:

    是的,它通过保持对表单本身的引用来作为一种指针。

    只要game 实例存在,在该类中对其Form 成员所做的任何更改都会影响实际表单。

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多