C# 属性、构造函数、

C# properties, constructor,

我想创建 class 来画板。我写了这样的代码(有效):

{
public class Map
{
    public int rows { get; set; }
    public int cols { get; set; }
    public int[,] grid { get; set; }

    public Map(int rows, int cols)
    {
        this.rows = rows;
        this.cols = cols;
        this.grid = new int[rows, cols];
    }
    public void printBoard()
    {
        for (int r = 0; r < rows; r++)
        {
            for (int c = 0; c < cols; c++)

            {
                Console.Write(grid[r, c] + "");
            }
            Console.WriteLine();
        }
    }
}
//Program.cs: 
Map map = new Map(2, 2); map.printBoard();

我的问题: 1.Can 我将数组创建为 属性 然后像上面的代码一样在构造函数中初始化它(不知道如何调用它)?我在这里读到我不应该这样做,但也许事实并非如此 2. 如果可以的话,这样写代码是不是很好的做法,也许我可以写得更好?

如您 link 的回答所述,属性通常不应 return 数组,因为这会将 class 的内部结构暴露给外部,而无法控制什么是数组的一部分。您声明 属性 的方式,客户端可以将任意值插入数组,而您的 class 无法执行任何验证。

按照惯例,属性名称也应使用大写字母。但就您而言,正确的做法是将所有属性字段设为私有。然后添加一个索引器来更新数组(请注意,甚至可以从外部更改 rowscols,这肯定会导致未定义的行为)。