2010-06-17 30 views
27

statik bir sınıfta bildiremezsiniz public static class var ve C# app.config dosyasından appSettings erişmeye çalışıyorum ve başlıkta açıklanan hatayı alıyorum.Örnek üyeleri, C#

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

Bunu nasıl çalıştırırım?

+1

make NameValueCollection statik .. –

+7

Statik anlamı nedir biliyor musunuz? Sorusundan, senin yaptığını sanmıyorum. Belki de özellikle C# sınıfları ile ilgili olarak tanımına kendinizi yeniden tanıtmalısınız. Bakınız: http://msdn.microsoft.com/en-us/library/98f28cdx(VS.71).aspx –

+5

Bu, statik bir 'çalışan' sınıfını ilk defa görmem gerekiyor. – BoltClock

cevap

65

Sınıf statik olarak bildirilmişse, tüm üyeler de statik olmalıdır.

static NameValueCollection appSetting = ConfigurationManager.AppSettings; 

Çalışan sınıfınızın statik olmasını istediğinizden emin misiniz? Bu davranışı neredeyse kesinlikle istemiyorsun. Sınıf ve üyelerden gelen statik kısıtlamayı kaldırmanız daha iyi olur.

+1

Statik sınıf üyelerini statik olarak açıkça belirtmemiz için herhangi bir neden var. Her üyenin neden statik olduğunu varsaymıyor, değerli yazım zamanından tasarruf ediyor. – Sherlock

+2

iyi soru @Sherlock, yaklaşık (yaklaşık) alıntı Eric Lippert; Muhtemelen birisi bu davranışı önceliklendirmek ve uygulamak zorunda kalacaktır çünkü ………… –

+0

muhtemelen üyeye SADECE bir bakacak olursanız, üyelerinizin davranışlarının neden uzun bir süre şaşkınlığa uğrayacağından şaşıracaksınız. statik bir üye gibidir, ancak statis olarak bildirilmez. "Statik" yazmamızı zorlamak, gelecekteki bir katılımcıya sorun yaşatmaktan çekinir. – Hacky

5

O ne anlama geldiğini söyler:

sınıf statik olmayan olun:

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

veya statik üyesi:

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

sen 'statik' saklama sınıfı kullanılarak denediniz benzer:

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

Statik bir sınıfta bir örnek üye bildirmek yasal değildir. Statik sınıflar örneklenemez, dolayısıyla bir örnek üyeye sahip olmaları (hiçbir zaman erişilebilir olmayacakları) hiçbir anlam ifade etmez.

1

John Weldon, tüm üyelerin statik bir sınıfta statik olması gerektiğini söyledi. yanı, statik olarak özelliğini bildirin

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

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

deneyin. Ayrıca, ConfigurationManager.AppSettings'e özel bir başvuru saklamakla uğraşmayın. ConfigurationManager zaten bir statik sınıftır.

Eğer zorunluluk mağaza AppSettings'i bir referans deneyin düşünüyorsanız

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

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

} 

Her zaman varsayılan özel olsa bile (vb özel, kamu,) açık bir erişim belirteci vermek iyi formudur.

2

Ben

Bunu başardı

, benim sorunum benim mülkiyet statik yapmak unuttum oldu ... Bu Mesaja eski olduğunu biliyorum ama.

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

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