2010-06-17 99 views
27

我有一个public static class,我试图从C#中的app.config文件中访问appSettings,并得到标题中描述的错误。无法在C#中的静态类中声明实例成员

public static class employee 
{ 
    NameValueCollection appSetting = ConfigurationManager.AppSettings;  
} 

我该如何得到这个工作?

+1

使NameValueCollection静态.. – 2010-06-17 16:14:38

+7

你明白什么是静态的意思吗?从你的问题来看,我认为你不这样做。你也许应该重新熟悉它的定义,特别是关于c#类。请参阅:http://msdn.microsoft.com/en-us/library/98f28cdx(VS.71).aspx – 2010-06-17 16:15:11

+5

这已经是我第一次看到一个静态的'员工'类。 – BoltClock 2010-06-17 16:16:05

回答

65

如果该类声明为静态,则所有成员也必须是静态的。

static NameValueCollection appSetting = ConfigurationManager.AppSettings; 

您确定要让您的员工类为静态吗?你几乎肯定不想要这种行为。从类和成员中移除静态约束可能会更好。

+1

是否有任何理由说明我们必须将静态类成员声明为静态类......如果它们必须是静态的为什么不假定每个成员都是静态的,从而节省宝贵的打字时间。 – Sherlock 2013-03-18 20:29:24

+2

@Sherlock的好问题,(大约)引用Eric Lippert;这可能是因为有人会不得不优先考虑并实施该行为...... :) – 2013-03-18 21:14:59

+0

更可能是因为如果你看看JUST成员,那么很长时间你会感到困惑的一个公平机会为什么你的成员行为就像一个静态成员,但它没有声明statis。 强迫我们输入“static”可以为将来的贡献者节省一些麻烦。 – Hacky 2016-10-29 23:36:16

5

它说,这是什么意思:

使类非静态:

public class employee 
{ 
    NameValueCollection appSetting = ConfigurationManager.AppSettings;  
} 

或成员静态:

public static class employee 
{ 
    static NameValueCollection appSetting = ConfigurationManager.AppSettings;  
} 
1

您是否尝试过使用 '静态' 存储类类似于?:

public static class employee 
{ 
    static NameValueCollection appSetting = ConfigurationManager.AppSettings;  
} 
5

在静态类中声明实例成员是不合法的。静态类不能被实例化,因此拥有一个实例成员是没有意义的(它们永远不可访问)。

1

正如John Weldon所说,所有成员在静态类中都必须是静态的。尝试

public static class employee 
{ 
    static NameValueCollection appSetting = ConfigurationManager.AppSettings;  

} 
1
public static class Employee 
{ 
    public static string SomeSetting 
    { 
     get 
     { 
      return ConfigurationManager.AppSettings["SomeSetting"];  
     } 
    } 
} 

申报财产为静态,以及。此外,不要打扰存储对ConfigurationManager.AppSettings的私人引用。 ConfigurationManager已经是一个静态类。

如果你觉得你必须店AppSettings的一个参考,尽量

public static class Employee 
{ 
    private static NameValueCollection _appSettings=ConfigurationManager.AppSettings; 

    public static NameValueCollection AppSettings { get { return _appSettings; } } 

} 

这是很好的形式总是给一个明确的访问说明符(私有,公共等),即使默认为私有。

2

我知道这个职位是旧的,但...

我能做到这一点,我的问题是,我忘了让我的财产是静态的。

public static class MyStaticClass 
{ 
    private static NonStaticObject _myObject = new NonStaticObject(); 

    //property 
    public static NonStaticObject MyObject 
    { 
     get { return _myObject; } 
     set { _myObject = value; } 
    } 
}