一个字段初始不能引用非静态字段,方法或属性
以下是我的代码:一个字段初始不能引用非静态字段,方法或属性
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'
线
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);
}
我还会在uploadBitsJob上添加只读,以确保在创建对象后无法更改它。如果它是有道理的。 – GregC 2013-03-04 15:05:19
你是否要求我将'BitsJob uploadBitsJob = manager.CreateJob(DisplayName,JobType.Upload);'部分也移到构造函数中。 B'cos'manager = new BitsManager();'已经在构造函数中。 – 2013-03-04 15:06:04
我已经与更多的代码更新 - 我的意思是在构造函数中分配uploadBitsJob - 它不能被初始化你现在怎么做,因为经理没有设置直到构造 – NDJ 2013-03-04 15:07:18
,试图时通常发生从静态方法访问非静态属性。请提供更多的代码。
您所描述的内容永远不会导致此错误消息。它只能在*字段初始值设定项*引用非静态成员时引起。 – Servy 2013-03-04 15:04:10
uploadBitsJob
在声明这使得它成为一个领域。字段实例不能用于初始化其他字段。
相反,你可以宣布现场没有初始化它:
BitsJob uploadBitsJob;
然后在构造函数初始化场:
public SyncHelper()
{
manager = new BitsManager();
uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload);//here. Now manager is initialized
}
那你有什么部分消息有问题? – 2013-03-04 14:59:02
如果OP包含'SyncHelper'的类声明,问题会更加清楚。 – 2013-03-04 15:14:57
不要忘记*在你的问题中提出问题*。这里没有问题,只是对某些行为的描述。 – 2013-03-04 15:54:39