2016-06-30 8 views
-1

私は私のasp.net MVCクラス内の以下のメソッドがあります: -オブジェクト参照が非静的フィールド、メソッド、またはプロパティのために必要とされる

public class Crud 
{ 
    Repository repository = new Repository(); 

    List<string> activeTech = repository.getAll().ToList(); 

が、私は次の例外を取得しています: -

を次のように私のコードに静的追加する場合
Error 1 An object reference is required for the non-static field, method, or property 

はしかし、例外が削除されます: -

public class Crud { 
    static Repository repository = new Repository(); 

    List<string> activeTech = repository.getAll().ToList(); 

ので、CAこれについて誰も助言してくれませんか?あなたのコンストラクタのコードが実行される前に、クラス内のフィールドの

おかげ

+2

2番目のステートメントがメソッド内にあることを確認しますか? –

答えて

3

初期化は直接行われます。現時点では、thisの参照はまだありません。

ので、フィールドの初期化は静的コンテキストで実行されて、あなたは、クラスの他のインスタンスメンバーにアクセスすることを許可されていません。

これを解決するために、あなたはあなたのコンストラクタ内activeTechの初期化を移動することができ:

public class CRUD 
{ 
    Repository repository = new Repository(); 
    List<string> activeTech; 

    public CRUD() 
    { 
     activeTech = repository.getAll().ToList(); 
    } 
} 

時にコンストラクタコードが実行されますので、this参照はアクセスできません、あなたは静的で、もはやですコンテキスト。


クラス名CRUDは、クラス名のためにUpperCamelCase(Crud)を提案するC#の命名規則と一致しないことに注意してください。

+0

なぜstaticを追加すると問題が解決するのですか? –

+1

@ JohnJohn 'static 'メンバは静的' context'でアクセスすることができます。 –

+0

私が混乱している問題は、共有メソッドと変数にブレークポイントを追加したときにVisual Studioを使用してプロジェクトを実行すると、スタティックメンバーに関連するブレークポイントでVisual Studioが停止しないためですフローがどのように進行するかを理解するために、静的メンバーに関連するブレークポイントでVSが決して停止しないという特定の理由がありますか? –

関連する問題