C#无法访问外部类型的非静态成员

C#无法访问外部类型的非静态成员,c#,C#,您好,我是一个初学者程序员,所以如果这个问题已经被回答或者没有意义,请原谅我。我的问题是我使用的是C#,无法从我创建的文件中访问标签。但是,在我重新启动计算机之前,该文件一直有效。这是代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Resources; namespace Moneypoly { public partial cla

您好,我是一个初学者程序员,所以如果这个问题已经被回答或者没有意义,请原谅我。我的问题是我使用的是C#,无法从我创建的文件中访问标签。但是,在我重新启动计算机之前,该文件一直有效。这是代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Resources;

namespace Moneypoly
{
    public partial class mainForm
    {

        public class chance
        {
          public void chanceOptionOne()
          {
              discriptionPlayer1.Text = "";           
          }
        }

    }
} 
DescriptionPlayer1.Text在此提供eror错误141无法通过嵌套类型“Moneypoly.mainForm.chance”访问外部类型“Moneypoly.mainForm”的非静态成员

考虑到它可以在我的其他文件中工作,并且代码是相同的,它应该可以工作。 另一个文件代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;

namespace Moneypoly
{
    public partial class mainForm : Form 
    {
        public mainForm()
        {
            InitializeComponent();
            giantView1.SizeMode = PictureBoxSizeMode.StretchImage;
            giantView2.SizeMode = PictureBoxSizeMode.StretchImage;
            giantView1.Image = Properties.Resources.startPlayerNoOne;
            giantView2.Image = Properties.Resources.startPlayerNoOne;
            player2Roll.Visible = false;
            dicePlayer1.Visible = false;
            dicePlayer2.Visible = false;
            player1Wallet.Text = " $ " + variables.player1Wallet.ToString();
            player2Wallet.Text = " $ " + variables.player2Wallet.ToString();
        }


        private void buttonRollDice_Click(object sender, EventArgs e)
        {
            movePlayer1();
            movePlayer2();
        }

        private void mainForm_Load(object sender, EventArgs e)
        {

        }

        private void player1_Click(object sender, EventArgs e)
        {

        }

        private void player1Roll_Click(object sender, EventArgs e)
        {
            movePlayer1();
            player1Roll.Visible = false;
            player2Roll.Visible = true;
            dicePlayer1.Visible = true;
        }

        private void player2Roll_Click(object sender, EventArgs e)
        {
            movePlayer2();
            player2Roll.Visible = false;
            player1Roll.Visible = true;
            dicePlayer2.Visible = true;
        }

        private void discriptionPlayer1_Click(object sender, EventArgs e)
        {

        }

        private void discriptionPlayer2_Click(object sender, EventArgs e)
        {

        }
    }

        }
C#中的内部类的工作方式与Java中的不同

Java中,内部类可以访问其外部类:在构建过程中,每个实例存储对构建实例的其父类的引用

C#中,内部类是定义可以访问实例私有成员的类的简单方法。换句话说,当您接收或存储对
mainForm
的引用时,您可以读取/写入/修改私有字段并调用私有方法。没有所谓的外部关系

因此,您可以将内部类中的构造函数定义为外部,然后设置父类的字段:

namespace Moneypoly {

    public partial class mainForm {

        public class chance {

          private readonly mainForm outer;

          public chance (mainForm outer) {
              this.outer = outer;
          }

          public void chanceOptionOne() {
              outer.discriptionPlayer1.Text = "";           
          }

        }

    }
}
请注意,在构造
chance
:可能使用
this
时,需要提供对
main表单的引用

这实际上也是Java所做的(只是程序员看不见它)


此外,在C#(和Java)中,习惯用大写字母开头类的名称(在C#方法中也是如此)。

这是试图在部分主窗体类内部创建一个类:

namespace Moneypoly
{
    public partial class mainForm
    {
    // UP TO HERE

        public class chance
        {
          public void chanceOptionOne()
          {
              discriptionPlayer1.Text = "";           
          }
        }

    }  // MOVE THIS BRACE
} 

C#中的内部类与Java中的内部类的工作方式不同。我看不出与原始文件有什么不同(除了换行符和一些注释)?