valor una requiere referencia que puede protección propiedad pasar para otro obtener objeto nivel método llamar inaccesible formulario esté estáticos debido datos campo c#

c# - una - puede que esté inaccesible debido a su nivel de protección



La clase pública es inaccesible debido a su nivel de protección (3)

Este error es el resultado del nivel de protección del ClassB de ClassB , no de ClassB . Como el nombre del constructor es el mismo que el nombre de la clase * , el error puede interpretarse incorrectamente. Como no especificó el nivel de protección de su constructor, se supone que es internal por defecto. Declarar el constructor public solucionará este problema:

public ClassB() { }

* También se podría decir que los constructores no tienen nombre, solo un tipo; esto no cambia la esencia del problema.

Tengo las siguientes clases:

namespace Bla.Bla { public abstract class ClassA { public virtual void Setup(string thing) { } public abstract bool IsThingValid(); public abstract void ReadThings(); public virtual void MatchThings() { } public virtual void SaveThings() { } public void Run(string thing) { Setup(thing); if (!IsThingValid()) { } ReadThings(); MatchThings(); SaveThings(); } } } namespace Bla.Bla { public class ClassB : ClassA { ClassB() { } public override void IsThingValid() { throw new NotImplementedException(); } public override void ReadThings() { throw new NotImplementedException(); } } }

Ahora trato de hacer lo siguiente:

public class ClassC { public void Main() { var thing = new ClassB(); ClassB.Run("thing"); } }

Lo cual devuelve el siguiente error: ClassB es inaccesible debido a su nivel de protección.

Pero todos son públicos.


Puede entrar en el diseñador del formulario web y cambiar los "controles web" para que sean "públicos" en lugar de "protegidos", pero no estoy seguro de cuán seguro es. Prefiero hacer entradas ocultas y tener jQuery establecer los valores en esas entradas ocultas, luego crear propiedades públicas en la clase del formulario web (código detrás) y acceder a los valores de esa manera.


También si quieres hacer algo como ClassB.Run("thing"); , asegúrese de que el Método Run(); es static o podrías llamarlo así: thing.Run("thing"); .