2017-06-05 2 views
0

パブリッククラスで2つの異なる変数を初期化しようとしていますが、2番目の変数を初期化すると、最初のもののプロパティ(この例ではName)が取得されます。私は2番目の名前を設定した後。最初の変数は、そのnameプロパティを2番目の名前に変更します。私は、コードの実行時に は、例えば:C#別のパブリッククラスの変数を初期化するときのエラー

//Initialization and set of first var 
    findLineToolA.Name = "findLineToolA"; 
    findLineToolB = null; 
    //After findLineToolB = new CatFindLineTool(); 
    findLineToolA.Name = "findLineToolA"; 
    findLineToolB.Name = "findLineToolA"; 

    //After findLineToolB.Name = "findLineToolB"; 
    findLineToolA.Name = "findLineToolB"; 
    findLineToolB.Name = "findLineToolB"; 

    public class CatFindLineTool 
    { 
      private static string _name; 

      public string Name 
      { 
       set 
       { 
        _name = value; 
       } 
       get 
       { 
        return _name; 
       } 
      } 
    } 
public class CatFindCornerTool 
{ 
    public CatFindLineTool findLineToolA; 
    public CatFindLineTool findLineToolB; 
    public CatFindCornerTool() 
    { 
    findLineToolA = new CatFindLineTool(); 
    findLineToolA.Name = "findLineToolA"; 
    findLineToolB = new CatFindLineTool(); 
    findLineToolB.Name = "findLineToolB"; 
    } 
    } 

を私は誰かが、複数の変数を初期化するときの特性が混在する理由を把握するために私を助けることができると思います。私は無視しているC#クラスに関する重要な概念があるからだと思います。 ありがとうございます。

答えて

3

_nameフィールドをstaticと宣言しました。これにより、クラスのすべてのインスタンスで 'グローバル'または '共有'エンティティになります。したがって、1つのインスタンスの変更はすべてのインスタンスに影響します。

staticキーワードを削除するだけで、コードは意図したとおりに機能するはずです。

+0

によって対処されます。コンセプトをありがとう。私は今からそれを心に留めておきます。 –

2

自動プロパティが便利です。 nameのプライベートメンバーを作成する必要はありません。

パブリックプロパティ

public string Name {get;set;} 

は内部で自動的にあなたのために必要なプライベートプロパティを作成します。

あなたの問題は、すでにそれは作業を行いイェンス・マイネッケ

+0

ヒントありがとうございます。変数を設定するときに特別な機能を必要としないときは、私もそれを心に留めておきます。 –