c#不能访问外部类型的非静态成员

本文关键字:静态成员 类型 外部 不能 访问 | 更新日期: 2023-09-27 18:08:33

你好,我是一个初学者程序员,所以请原谅n=我,如果这个问题已经回答或没有意义。我的问题是,我正在使用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 = "";           
          }
        }
    }
} 

discriptionPlayer1。文本给出了一个错误,这里是错误141不能访问外部类型'Moneypoly '的非静态成员。通过嵌套类型'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#不能访问外部类型的非静态成员

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时,您将需要给出对mainForm的引用:可能使用this

实际上Java也是这样做的(除了它对程序员是不可见的)。

此外,在c#(和Java)中,类名(c#方法也是如此)以大写字母开头是自定义的。

这是尝试在部分主表单类中创建一个类:

namespace Moneypoly
{
    public partial class mainForm
    {
    // UP TO HERE
        public class chance
        {
          public void chanceOptionOne()
          {
              discriptionPlayer1.Text = "";           
          }
        }
    }  // MOVE THIS BRACE
}