c# - valor - se requiere una referencia de objeto para el campo método o propiedad no estáticos




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

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.


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.


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.





c#