2013-03-04 45 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 
} 
相关问题