Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编译错误:字段初始值设定项无法引用非静态字段、方法或属性_C#_Compiler Errors_Chess - Fatal编程技术网

C# 编译错误:字段初始值设定项无法引用非静态字段、方法或属性

C# 编译错误:字段初始值设定项无法引用非静态字段、方法或属性,c#,compiler-errors,chess,C#,Compiler Errors,Chess,当我编译下面的代码时,编译器会给出错误:字段初始值设定项不能引用此代码中具有星号的非静态字段、方法或属性 KingPiece kingPiece = new KingPiece(***siyahsah1***,ChessColor.White); 有人能帮我吗 class PiecePosition { public enum ChessColor { White, Black, } public class ChessPi

当我编译下面的代码时,编译器会给出错误:字段初始值设定项不能引用此代码中具有星号的非静态字段、方法或属性

 KingPiece kingPiece = new KingPiece(***siyahsah1***,ChessColor.White);
有人能帮我吗

 class PiecePosition
{

    public enum ChessColor
    {
        White,
        Black,
    }
    public class ChessPiece
    {

        private Image DisplayedImage;
        private ChessColor DisplayedColor;
        private Point CurrentSquare;
        public Point[] ValidMoves;
        public ChessPiece(Image image, ChessColor color)
        {
            DisplayedImage = image;
            DisplayedColor = color;
        }
    }

    public  class KingPiece : ChessPiece
    {



        public KingPiece(Image image, ChessColor color)
            : base(image, color)
        {


            ValidMoves[0] = new Point(0, -1);    //  Up 1
            ValidMoves[1] = new Point(1, -1);  //  Up 1, Right 1
            ValidMoves[2] = new Point(1, 0);     //  Right 1

            ValidMoves[7] = new Point(-1, -1);  //  Left 1, Up 1
        }

        System.Drawing.Bitmap siyahsah1 = chess6.Properties.Resources.siyahsah1;
        KingPiece kingPiece = new KingPiece(siyahsah1,ChessColor.White);


    }

}

这个错误是可以自我解释的。siyahsah1是KingPiece的非静态私有属性,在调用构造函数时未初始化not

您应该将该行移动到构造函数中:

kingPiece = new KingPiece(siyahsah1,ChessColor.White);
问题是您还没有类实例,编译器不喜欢这样。如果您只需将该行移动到构造函数中,它就会工作

您仍然必须将属性定义为私有字段。您可以通过以下方式执行此操作:

private KingPiece kingPiece;

在第一行的当前位置执行此操作。最终结果将与您现在使用的完全相同,只是它将被编译。

正如其他人所说,siyahsah1是一个非静态私有字段,不能用于初始化其他字段。 但你还有一个问题。因为KingPiece类只有一个构造函数,所以不能在构造函数本身中创建该类的新实例-它将生成StackOverflowException。解决方法是创建另一个私有构造函数,该构造函数只能从KingPiece类中调用。但更好的是,也许你可以告诉我们你想做什么,我们可以帮你

更新:考虑到这些评论,我猜arash希望指定要与KingPiece类一起使用的图像。如果只使用一个独立于工件颜色的图像,则可以将该参数传递给基本构造函数

public class KingPiece: ChessPiece {
  public KingPiece(ChessColor color):
    // Pass the image to the base class. All king pieces will use this image.
    base(chess6.Properties.Resources.siyahsah1, color) {
    ..
  }
}
但是,如果您希望每种颜色都有不同的图像,那么应该在其他地方或作为静态字段/属性进行定义

public class KingPiece: ChessPiece {
  public static readonly BlackKing = new KingPiece(/* image of the black king here */, ChessColor.Black);
  public static readonly WhiteKing = new KingPiece(/* image of the white king here */, ChessColor.White);

  // Constructor could also be made private since you probably don't need other instances beside black and white.
  public KingPiece(Image image, ChessColor color): base(image, color) {
    ...
  }
}

希望这有帮助。

请不要发布无关代码,这会使阅读变得困难,示例中的clas板与您的问题无关。除了将Board类嵌套到PiecePosition有点奇怪之外,你能告诉我,我现在可以将它们准确地放在我的代码中的什么地方吗?谢谢,他将根据stack overflow的建议得到stack overflow:@Patko-Shit,甚至没有注意到。@arash-因为@Patko:的评论,你能解释一下你想要实现什么吗?此代码将导致堆栈溢出,这可能是您现在正在寻找的。谢谢。我想在棋盘游戏中实现国王的移动,并将其图片放在其中。现在您可以帮助我吗?@arash-为什么需要国王字段?@Patko:对于国王的所有有效移动,我想这就是国王类的用途吧?但是关于Kingpoite字段,你为什么需要它呢?@arash,我已经更新了我的答案。希望它能帮助你。哦,你应该删除kingPiece字段,可能还有siyahsah1字段。