[英]C# cannot access a non-static member of outer type
您好我是一个初学者程序员,所以如果这个问题已经回答或没有意义,请原谅我。 我的问题是我正在使用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.Text出现错误,这是错误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
时需要提供对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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.