2010-06-17 96 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; } 
    } 
}