0

行列用の C# クラスを作成しています。SOで実際に何かを見つけたので、最初から始める必要はありません。男のクラスには、行列の行と列のプライベート プロパティとget()andset()プロパティがあります。以下に示すように、計算目的でクラス内のプロパティ自体を名前またはmRowCountandで参照する場合があります (関連するコードのみを追加しました)。mColumnCountthis.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; }
  }
}

コードの中で、プロパティを名前mRowCountで使用することもあれば、以前の方法の代わりにandmColumnCountを使用することもあります。違いはなんですか?一方通行の方が良いですか?もしそうなら、何に関して? 特に、オブジェクト/行列が対角行列、対称行列、または正方行列であるかどうかをチェックするブール型メソッドでは、開発者は、行列のデータを保持する配列を実行するループでandを使用します。また、プロパティ自体を使用することもあります。なぜ誰かがこれを行うのか、それとも間違いなのか説明できますか? 何を使用し、プログラム全体で使用する必要がありますか?this.RowCountthis.ColumnCountthis.RowCountthis.ColumnCountmInnerMatrix[]

4

2 に答える 2

1

技術的には、 メソッドgetsetメソッドはそれほど単純ではありません。たとえば、行数と列数を格納せず、代わりに行と合計要素を格納する場合、合計を行で割って列を取得する必要があります。

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

これは最良のサンプルではありませんが、アイデアは得られます。あなたの単純なケースでは、フィールドを使用するかプロパティを使用するかに違いはありません(実際にsetメソッドを持っているがそれらを省略した場合、それ以外の場合、プロパティは読み取り専用です!)。ただし、ある日、何らかのロジックを に実装したい場合があることに注意してくださいget。その場合、プロパティを使用しているコードは正常に機能しますが、フィールドを使用しているコードは失敗します。

クラスの外では、常にプロパティを使用する必要があります。private実際、クラス内でのみアクセスできるようにフィールドを宣言します。技術的には、フィールドとプロパティの両方をクラス外で使用できますが、それは混乱につながります。

一方、クラス内でプロパティとフィールドへのアクセスを混在させることは常にお勧めできません。場合によっては、このアクセスが本当に必要になることがあります。最も簡単な例は、プロパティが読み取り専用 ( のみget) の場合です。

于 2013-03-31T14:17:00.737 に答える
0

プロパティを定義した場合は、メンバーへの直接アクセスだけでなく、追加のロジックが含まれている可能性があるため、クラスの内部または外部で可能な限り使用してください。

プロパティを使用しない (代わりに直接アクセスを使用する) 正当な理由の 1 つ - コンストラクターでは、他のすべてのアクセスはプロパティを使用して行う必要があります。

クラス内で直接アクセスとプロパティを混在させるのはかなり悪い習慣です

于 2013-03-31T14:12:29.793 に答える