C#反对导向

时间:2017-05-05 10:49:39

标签: c# class

我有以下代码:

  public class Game
    {
        public Game(int board)
        {

        }

        public List<int> play(List<int> lines)
        {
            return lines;
        }
    }

如果我使用参数2来实例化“Game”类的新对象:

Game game = new Game(2)

有没有办法在“play”方法中检索(和使用)这个参数而不声明这两个方法之外的任何其他变量,或者定义任何其他方法?

任何帮助将不胜感激。感谢。

9 个答案:

答案 0 :(得分:1)

您需要将其存储在类成员变量中,如

public class Game
{
private int board;
    public Game(int board)
    {
       this.board = board;
    }

    public List<int> play(List<int> lines)
    {
        return lines[board];
    }
}

答案 1 :(得分:1)

public class Game { 
    private int _board;
    public Game(int board) {
        _board = board;
    }

    public List<int> play(List<int> lines)
    {
        //use _board here eg: this._board ...
        return lines;
    }
}

答案 2 :(得分:0)

您可以定义int类型的private int board;成员,并为其分配board的值。然后你可以在播放方法中访问它。

答案 3 :(得分:0)

public class Game { 

    private int Board;
    public Game(int board) {
        Board = board;
    }

    public List<int> play(List<int> lines)
    { 
        //used board here
        return lines;
    }
}

只需创建一个可以通过play方法访问的变量Board

答案 4 :(得分:0)

board声明为您班级中的成员,以便所有功能都可以访问它。也许是这样的:

public class Game 
{
    private int board;

    // Constructor for game. Initializes a new board
    public Game(int board) 
    {
        this.board = board
    }

    public List<int> play(List<int> lines)
    {
        // Access board
        return lines;
    }
}

答案 5 :(得分:0)

定义一个private field来保存通过构造函数传递的值。然后在Play-Method中访问此字段:

public class Game { 
    private readonly int _Board;
    public Game(int board) {
        _Board = board;
    }

    public List<int> play(List<int> lines)
    {
        //access field here
        var board = _Board;
        return lines;
    }
}

答案 6 :(得分:0)

我建议声明属性并使用构造函数链接

 public class Game {
   public Game(int board, List<int> lines) {
     if (board < 0)
       throw new ArgumentOutOfRange("board");
     else if (lines == null)
       throw new ArgumentNullException("lines"); 

     Board = board;
     Lines = lines; 
   }          

   public Game(int board)
     : this(board, new List<int>()) {
   }

   public Game(List<int> list)
     : this(0, list) {
   }

   public int Board {
     get;
     private set;
   }

   public List<int> Lines {
     get;
     private set;  
   }
 }  

典型用途:

 Game game = new game(3); 

 game.Lines.Add(123); 
 game.Lines.Add(456); 

 // Board: 3; Lines: 123, 456
 Console.Write("Board: {0}; Lines: {1}", game.Board, string.Join(", ", game.Lines));

答案 7 :(得分:0)

将它作为第二个参数传递给play方法,而不是将它传递给构造函数,因为你在构造函数中没有对它进行任何操作。

public class Game  
{
    public Game() {}

    public List<int> play(List<int> lines, int board)
    {
        // do whatever you want to do with board here
        return lines;
    }
}

答案 8 :(得分:0)

我相信答案的数量是由于你没有在你的问题中澄清“你在哪里”使用参数的值。

如果大多数人怀疑你只想在课堂上使用它(比如任何一个类的方法),那么一个字段就足够了,你可以使用任何先前给出的答案。虽然我暗中想到@ jon-Lopez-garcia的一个,但是因为它符合我的风格并且不做任何额外的假设。

另一方面,如果您需要从类的方法外部访问该值,那么属性是正确的方法。检查@ dmitry-bychenko的答案,非常完整,但做了一些假设,你没有提到你需要的功能。

然而,如果你想从外面访问它,你也必须考虑是否要从外面改变它,因为在@ dmitry-bychenko的回答中没有从外面改变(注意“私人集; “)

因为缺乏背景,所以我不会做空。

public class Game
{
    public int Board { get; private set; }
    public Game(int board)
    {
        Board = board;
    }

    public List<int> play(List<int> lines)
    {
        //use Board here
        return lines;
    }
}

这些可能是该主题的良好读数: