保護 - internal method c#




保護レベルのためにパブリッククラスにアクセスできない (2)

あなたはWebフォームのデザイナーに入り、 "webcontrols"を "protected"の代わりに "public"に変更することができますが、どれだけ安全かはわかりません。 私は隠された入力を作成し、それらの隠れた入力に値を設定し、Webフォームのクラス(コードビハインド)で公開プロパティを作成し、そのように値にアクセスするjQueryを持つことを好みます。

私は以下のクラスを持っています:

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();
        }
    }
}

今私は次のことを試みます:

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

これは、次のエラーを返します。ClassBは保護レベルのためにアクセスできません。

しかし、彼らはすべて公開されています。


このエラーは、 ClassBコンストラクタの保護レベルの結果であり、 ClassB自体の保護レベルの結果ではありません。 コンストラクタの名前がクラス*の名前と同じであるため、エラーが誤って解釈される可能性があります。 コンストラクタの保護レベルを指定していないので、デフォルトではinternalレベルとみなされます。 コンストラクタをpublic宣言すると、この問題が解決されます。

public ClassB() { } 

*コンストラクタには名前がなく、型だけがあると言うこともできます。 これは問題の本質を変えない。





c#