Question

Pourquoi les programme suivant

B
B

(comme il se doit)

public class A
    {
        public void Print()
        {
            Console.WriteLine("A");
        }
    }

    public class B : A
    {
        public new void Print()
        {
            Console.WriteLine("B");
        }

        public void Print2()
        {
            Print();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var b = new B();
            b.Print();
            b.Print2();
        }
    }

mais si on enlève en classe B 'public' mot-clé comme ceci:

    new void Print()
    {
        Console.WriteLine("B");
    }

il commence à imprimer

A
B

Était-ce utile?

La solution

Lorsque vous supprimez le modificateur d'accès public, vous supprimez toute possibilité d'appeler la méthode de new Print() de B de la fonction Main car maintenant par défaut private. Il est plus accessible au menu principal.

La seule option restante est de revenir à la méthode héritée de A, comme c'est la seule mise en œuvre accessible. Si vous deviez appeler Print () à partir d'une autre méthode B vous obtenez la mise en œuvre B, parce que les membres de B verraient la mise en œuvre privée.

Autres conseils

Vous faites la méthode Print private, la seule méthode Print disponible est celle héritée.

Extérieurement, la nouvelle B.Print () - méthode n'est plus visible, donc A.Print () est appelée

.

Dans la classe, cependant, la nouvelle B.Print méthode est encore visible, de sorte que est celui qui est appelé par des méthodes dans la même classe.

lorsque vous supprimez le public mot-clé de la classe B, la nouvelle méthode d'impression n'est plus disponible en dehors de la classe, et donc quand vous b.print de votre programme principal, il est en fait un appel à la méthode publique disponible en A (parce que b hérite d'une et a encore impression que public)

Sans le mot-clé public, la méthode est privée, ne peut donc pas être appelé par Main ().

Toutefois, la méthode Print2 () peut l'appeler comme on peut voir d'autres méthodes de sa propre classe, même si privé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top