通过this.PropertyGet访问类中的类属性

时间:2013-03-31 14:08:18

标签: c# matrix

我正在为矩阵构建一个C#类。我实际上在SO上发现了一些东西,所以我不必从头开始。该人的类具有矩阵的行和列的私有属性以及get()set()属性。有时,这个人会根据名称mRowCountmColumnCount或者类中的this.RowCountthis.ColumnCount来引用属性本身,以便进行计算,如下所示(我只添加了相关代码) ):

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

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

有时在代码中,该人使用名称mRowCountmColumnCount的属性,有时使用this.RowCountthis.ColumnCount代替以前的方式。有什么不同?是一种更好的方式,如果是这样,尊重什么?特别是在布尔方法中,方法检查对象/矩阵是对角线,对称还是方形矩阵,开发人员在通过this.RowCount的循环中使用this.ColumnCountmInnerMatrix[]保存矩阵数据的数组。其他时候他自己使用这些属性。任何人都可以解释为什么有人会这样做或者这是一个错误吗?我应该使用什么?我应该在整个程序中使用它吗?

2 个答案:

答案 0 :(得分:1)

从技术上讲,getset方法可能并不那么简单。例如,如果您不存储行和列数,而是存储行和总元素,则必须按行划分总数以获取列:

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

这不是最好的样本,但你可以得到这个想法。在您的简单情况下,无论是使用字段还是属性都没有区别(如果您实际使用set方法但省略它们,否则属性是只读的!)。但请注意,有一天您可能希望在get中实现一些逻辑。然后使用属性的代码可以正常工作,但使用字段的代码将失败。

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

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

答案 1 :(得分:0)

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

不使用属性的一个正当理由(改为使用直接访问) - 在构造函数中, 每个其他访问都应该使用属性。

在一个类

中混合直接访问和属性是相当不好的做法