Sinn von CS1540?



  • Hi,

    kann mir bitte jemand den Sinn von CS1540 erklären? Ich verstehe nicht, wofür das gut sein soll 😕

    MfG,

    Michael E.



  • Hallo,

    public class Base 
    {
        protected void Foo() {
            // ...
        }
    }
    
    public class Derived : Base
    {
        public static void CallFoo(Base b) {
            b.Foo();
        }
    }
    
    public sealed class AnotherDerived : Base 
    {
        protected void Foo() {
            // ...
        }
    }
    
    public class Application 
    {
        public static void Main(string[] args) {
            Derived.CallFoo(new AnotherDerived());
        }
    }
    

    In diesem Beispiel wird eben gezeigt, dass ohne diese Fehlermeldung der Schutz durch protected ausgehebelt werden
    kann, denn Derived erbt nicht von AnotherDerived, könnte aber trotzdem auf protected Elemente zugreifen. Ich habe
    mich für das Beispiel auch noch dazu entschlossen AnotherDerived zu versiegeln um die "Bösartigkeit" besser zu
    demonstrieren, da man als Programmierer ja nun davon ausgehen kann, dass Foo() sicher nur intern aufgerufen
    werden kann, nachdem keine weiteren Klassen mehr ableiten können.

    grüße
    Bernhard Huemer



  • Danke. Eine weitere Situation, in der dieser Fehler nützlich ist, ist, wenn CallFoo überladen/überdeckt wird.


Log in to reply