2013-03-04 8 views
7

Folgende ist mein Code:Ein Feldinitialisierer kann nicht verweisen auf die nicht-statische Feld, Methode oder Eigenschaft

private BitsManager manager; 
private const string DisplayName = "Test Job";  

public SyncHelper() 
{ 
    manager = new BitsManager(); 
}   

BitsJob uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload); 

Ich erhalte folgende Fehlermeldung:

A field initializer cannot reference the non-static field, method, or property 'BITSIntegrationModule.SyncService.SyncHelper.manager'

+2

Und welchen Teil der Nachricht haben Sie ein Problem mit ? –

+0

Die Frage wäre klarer gewesen, wenn das OP die Klassendeklaration für 'SyncHelper' enthalten hätte. –

+2

Vergessen Sie nicht, * eine Frage * in Ihrer Frage zu stellen. Das ist keine Frage, nur eine Beschreibung eines Verhaltens. –

Antwort

10

Die Linie

BitsJob uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload); 

nicht Manager zugreifen, da sie noch nicht auf etwas festgelegt wurde - Sie die Zuordnung in den Konstruktor bewegen konnte -

private readonly BitsManager manager; 
private const string DisplayName = "Test Job";  
BitsJob readonly uploadBitsJob; 

public SyncHelper() 
{ 
    manager = new BitsManager(); 
    uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload); 
} 
+0

Ich würde auch readonly auf uploadBitsJob hinzufügen, um sicherzustellen, dass es nicht geändert werden kann, sobald das Objekt erstellt wurde. Wenn es Sinn macht. – GregC

+0

Bitten Sie mich, 'BitsJob uploadBitsJob = manager.CreateJob (DisplayName, JobType.Upload);' Teil in den Konstruktor zu verschieben. B'cos 'manager = neuer BitsManager();' befindet sich bereits im Konstruktor. –

+0

Ich habe mit etwas mehr Code aktualisiert - ich wollte uploadBitsJob im Konstruktor zuweisen - es kann nicht initialisiert werden, wie Sie es gerade tun, weil der Manager nicht gesetzt ist, bis der Konstruktor – NDJ

-4

Das geschieht in der Regel, wenn sie versuchen Zugriff auf nicht statische Eigenschaft von statischen Methode. Bitte gib ein bisschen mehr Code an.

+3

Was Sie beschreiben, konnte diese Fehlermeldung nie verursachen. Es kann nur verursacht werden, wenn ein * Feldinitialisierer * auf ein nicht statisches Element verweist. – Servy

2

uploadBitsJob bei der erklärt wird, Klassenstufe, die es zu einem Feld macht. Feldinstanzen können nicht zum Initialisieren anderer Felder verwendet werden.

Stattdessen können Sie das Feld deklarieren, ohne es zu initialisieren:

BitsJob uploadBitsJob;

dann das Feld im Konstruktor initialisieren:

public SyncHelper() 
{ 
    manager = new BitsManager(); 
    uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload);//here. Now manager is initialized 
}