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 无法执行任何验证。
按照惯例,属性名称也应使用大写字母。但就您而言,正确的做法是将所有属性字段设为私有。然后添加一个索引器来更新数组(请注意,甚至可以从外部更改 rows
和 cols
,这肯定会导致未定义的行为)。
我想创建 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 无法执行任何验证。
按照惯例,属性名称也应使用大写字母。但就您而言,正确的做法是将所有属性字段设为私有。然后添加一个索引器来更新数组(请注意,甚至可以从外部更改 rows
和 cols
,这肯定会导致未定义的行为)。