2010-06-17 49 views
27

Tengo un public static class y estoy intentando acceder al appSettings desde mi archivo app.config en C# y aparece el error descrito en el título.No puedo declarar miembros de instancia en una clase estática en C#

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

¿Cómo hago para que funcione?

+1

make NameValueCollection static .. –

+7

¿Entiende lo que static significa? Por su pregunta, no creo que lo haga. Quizás deberías volver a familiarizarte con su definición, especialmente con respecto a las clases de C#. Ver: http://msdn.microsoft.com/en-us/library/98f28cdx(VS.71).aspx –

+5

Esta tiene que ser la primera vez que veo una clase 'employee' estática. – BoltClock

Respuesta

65

Si la clase se declara estática, todos los miembros deben ser estáticos también.

static NameValueCollection appSetting = ConfigurationManager.AppSettings; 

¿Está seguro de que quiere que su clase de empleado sea estática? Es casi seguro que no quieres ese comportamiento. Probablemente será mejor que elimines la restricción estática de la clase y los miembros.

+1

hay alguna razón por la cual tenemos que declarar explícitamente que los miembros de la clase estáticos son estáticos ... si tienen que ser estáticos ¿Por qué no se supone que cada miembro es estático? Se ahorra un precioso tiempo de tipeo. – Sherlock

+2

buena pregunta @Sherlock, para (aproximadamente) citar a Eric Lippert; es probable que se deba a que alguien tuvo que haber priorizado e implementado ese comportamiento ... :) –

+0

más probablemente porque si echas un vistazo a SÓLO el miembro, hay una buena probabilidad de que te desconcierte por un largo tiempo por qué el comportamiento de tus miembros es como un miembro estático, pero no está declarado como statis. Forzarnos a escribir "estático" ahorra problemas a un futuro colaborador. – Hacky

5

Dice lo que significa:

hacer que su clase no estática:

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

o el miembro estático:

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

¿Ha intentado utilizar la clase de almacenamiento 'estático' similar a ?:

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

No es legal declarar un miembro de instancia en una clase estática. No se puede crear una instancia de la clase estática, por lo tanto, no tiene sentido tener miembros de instancia (nunca serían accesibles).

1

Como dijo John Weldon, todos los miembros deben ser estáticos en una clase estática. Trate

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

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

Declarar la propiedad como estática, también. Además, no se moleste en almacenar una referencia privada a ConfigurationManager.AppSettings. ConfigurationManager ya es una clase estática.

Si usted siente que necesidad almacenar una referencia a appsettings, intenta

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

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

} 

Es buena forma de dar siempre un especificador de acceso explícito (privado, público, etc.) a pesar de que el valor predeterminado es privado.

2

Sé que este post es antiguo, pero ...

yo era capaz de hacer esto, mi problema es que me olvidé de hacer mi propiedad estática.

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

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