2013-03-04 64 views
7

以下是我的代碼:一個字段初始不能引用非靜態字段,方法或屬性

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

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

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

我收到以下錯誤:

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

+2

那你有什麼部分消息有問題? – 2013-03-04 14:59:02

+0

如果OP包含'SyncHelper'的類聲明,問題會更加清楚。 – 2013-03-04 15:14:57

+2

不要忘記*在你的問題中提出問題*。這裏沒有問題,只是對某些行爲的描述。 – 2013-03-04 15:54:39

回答

10

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

,因爲它沒有被設置爲任何事情不能訪問管理器 - 你可以分配進入構造 -

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

我還會在uploadBitsJob上添加只讀,以確保在創建對象後無法更改它。如果它是有道理的。 – GregC 2013-03-04 15:05:19

+0

你是否要求我將'BitsJob uploadBitsJob = manager.CreateJob(DisplayName,JobType.Upload);'部分也移到構造函數中。 B'cos'manager = new BitsManager();'已經在構造函數中。 – 2013-03-04 15:06:04

+0

我已經與更多的代碼更新 - 我的意思是在構造函數中分配uploadBitsJob - 它不能被初始化你現在怎麼做,因爲經理沒有設置直到構造 – NDJ 2013-03-04 15:07:18

-4

,試圖時通常發生從靜態方法訪問非靜態屬性。請提供更多的代碼。

+3

您所描述的內容永遠不會導致此錯誤消息。它只能在*字段初始值設定項*引用非靜態成員時引起。 – Servy 2013-03-04 15:04:10

2

uploadBitsJob在聲明這使得它成爲一個領域。字段實例不能用於初始化其他字段。

相反,你可以宣佈現場沒有初始化它:

BitsJob uploadBitsJob;

然後在構造函數初始化場:

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