0

我正在为矩阵构建一个 C# 类。我实际上在 SO 上找到了一些可以开始的东西,所以我不必从头开始。这个家伙的类有一个私有属性,用于矩阵的行和列以及一个get()set()属性。mRowCount有时,为了计算目的,这个家伙通过名称和mColumnCount或通过类内部的this.RowCountand来引用属性本身,this.ColumnCount如下所示(我只添加了相关代码):

public class Matrix
{
  private decimal[,] mInnerMatrix;
  private int mRowCount, mColumnCount = 0;

  public int RowCount
  {
    get { return mRowCount; }
  }
  public int ColumnCount
  {
    get { return mColumnCount; }
  }
}

有时在代码中,这个人按名称使用属性,有时使用mRowCountand而不是前一种方式。有什么区别?有一种更好的方法吗?如果是这样的话,关于什么?特别是在布尔方法中,这些方法检查对象/矩阵是对角矩阵、对称矩阵还是方阵,开发人员在遍历包含矩阵数据的数组的循环中使用and 。其他时候,他使用这些属性本身。谁能解释为什么有人会这样做或者这是一个错误?我应该使用什么,我应该在整个程序中使用它吗?mColumnCountthis.RowCountthis.ColumnCountthis.RowCountthis.ColumnCountmInnerMatrix[]

4

2 回答 2

1

从技术上讲,getandset方法可能不是那么简单。例如,如果您不存储行数和列数,而是存储行数和总数,则必须将总数除以行数才能得到列数:

public Cols {get {return _mTotal/_mRows;}}

这不是最好的示例,但您可以理解。在您的简单情况下,使用字段还是属性没有区别(如果您实际上有set方法但省略了它们,否则属性是只读的!)。但请注意,有一天您可能希望在get. 然后使用属性的代码可以正常工作,但使用字段的代码会失败。

在一个类之外,你总是必须使用属性,如果有的话。事实上,您将声明字段private,以便只有在类中您才能访问它们。从技术上讲,您可以在类之外使用字段和属性,但这会导致混乱。

另一方面,我不同意在一个类中混合属性和字段访问总是不鼓励的。有时您确实需要此访问权限,最简单的示例是您的属性是只读的(只有get)。

于 2013-03-31T14:17:00.737 回答
0

如果您定义了属性 - 尽可能在类内部或外部使用它们,因为它们可能包含其他逻辑,而不仅仅是直接成员访问。

不使用属性的一个正当理由(改用直接访问) - 在构造函数中,应使用属性进行所有其他访问。

在一个类中混合直接访问和属性是相当糟糕的做法

于 2013-03-31T14:12:29.793 回答