0

我有一个问题,我要声明一个公共类和结构,然后必须从我的 main 运行一个函数,并且不能从 main 声明类和结构内的变量。因此,由于“方法没有重载”错误,该函数将无法工作。我将如何解决这个问题?我觉得好像我错过了一些非常简单但看不到的东西。

提前致谢。如果您需要任何进一步的信息来帮助我,请不要犹豫。

 public struct CellReference
    {
        private int CNorth, CEast;

        public int CellsNorth
        {
            get
            {
                return CellsNorth;
            }
            set
            {
                CNorth = value;
            }
        }

        public int CellsEast
        {
            get
            {
                return CellsEast;
            }
            set
            {
                CEast = value;
            }
        }

    }

    static void Main(string[] args)
    {
        Piece black1, black2, black3, black4, black5, black6, black7, black8, black9, black10, black11, black12, white1, white2, white3, white4, white5, white6, white7, white8, white9, white10, white11, white12;


        StartGame();
        Console.ReadKey();


    }


    public class Piece
    {
        public CellReference Location;
        public bool isBlack;
        public bool isKing;

    }

基本上我无法初始化 StartGame() 需要的一些变量。

那么 StartGames 是这样的:

static void StartGame(ref int CNorth, ref int CEast, ref bool isKing, ref bool isBlack, ref int CellsEast, ref int CellsNorth, ref Piece black1, ref Piece black2, ref Piece black3, ref Piece black4, ref Piece black5, ref Piece black6, ref Piece black7, ref Piece black8, ref Piece black9, ref Piece black10, ref Piece black11, ref Piece black12, ref Piece white1, ref Piece white2, ref Piece white3, ref Piece white4, ref Piece white5, ref Piece white6, ref Piece white7, ref Piece white8, ref Piece white9, ref Piece white10, ref Piece white11, ref Piece white12)

但是,如果我在 main 中调用 StartGame(),如果我将所有引用都放入它不起作用,因为它们不在 Main 中。

4

2 回答 2

0

我认为人们没有回答的原因是因为您证明缺乏基本的编程概念,人们很难清楚地向您解释您的问题。@jibedoubleve 突出了其中许多。我建议你拿起一本 C# 初学者的书来阅读以获得更多的理解。

恕我直言,我认为您遇到的基本问题是理解 C# 程序入口点和 OOP 概念。所以这是我尝试用代码解释的:

public static class Program
{
    [STAThread]
    static void Main()
    {
        var game = new Game();
        game.StartGame();
    }
}

public class Game
{
    Piece black1, black2, black3,
    black4, black5, black6, black7, 
    black8, black9, black10, black11,
    black12, white1, white2, white3,
    white4, white5, white6, white7,
    white8, white9, white10, white11, white12;

    public struct CellReference
    {
        public int CellsNorth;

        public int CellsEast;
    }

    public class Piece
    {
        public CellReference Location
        public bool isBlack;
        public bool isKing;
    }

    public StartGame()
    {
        // play game logic here
    }
}

自动生成的 Program 类处理应用程序级别的问题,例如创建窗口和检查应用程序运行权限。

Main() 函数是程序入口点。您创建一个 Game 对象来操作片段和逻辑。请注意,Program 类不应该有 StartGame() 方法,而是知道如何开始游戏的是 Game 对象。

于 2013-02-26T10:49:07.860 回答
0

一些备注:

错误:

方法'Main'没有重载需要0个参数

发生此错误是因为您正在调用StartGame不带参数的方法,而正在期待一个巨大的参数列表。要解决此问题,请为您的方法指定参数;)

访问者:

第一次尝试获取CellReference.CellsEastor的值时CellReference.CellsNorth,您将得到 aStackOverflowException因为访问器正在调用自身。要解决这个问题,你可以struct这样重写:

public struct CellReference
{
    public int CellsNorth
    {
        get; set;
    }

    public int CellsEast
    {
        get; set;
    }
}

StartGame签名:

19个论点,太过分了!!!请使用一块Array。我写了这样的代码:

void Main()
{
    var pieces= new Piece[] 
    { 
        new Piece(1), 
        new Piece(2) 
    };
    StartGame(array);
}

private void StartGame(Piece[] pieces)
{
    /* Do your work*/
}

class Piece
{
    public Piece(int i)
    {
        this.Value = i;
    }
    private int Value { get; set; }
}

ref关键词:

你为什么使用关键字ref?你想要StartGame修改你将在Main方法中使用的参数吗?

我创建了一个类,其中包含一组片段以及修改它们的方法。如果您需要获取碎片的值,我会创建吸气剂。

您的领域的 Pascal 案例:

_通常,我们对字段使用 Camel 大小写(或者我们以“ ”或“ ”为前缀m_),对属性、类和方法使用 Pascal 大小写。如果一切都在 Pascal Case 中,你真的不知道你在使用什么。这不是强制性的,但它是一个良好的实践规则。

于 2013-02-24T18:32:13.003 回答