Pourquoi utilisons-nous le virtuel et la remplacer?

Pourquoi utilisons-nous remplacer et virtuelle si elle donne le même effet lorsque nous ne pas utiliser de remplacement et virtuel?

exemple 1:

class BaseClass
{
    public virtual string call()
    {
        return "A";
    }
}

class DerivedClass : BaseClass
{
    public override string call()
    {
        return "B";
    }
}

de sortie : B

Exemple 2:

class BaseClass
{
    public string call()
    {
        return "A";
    }
}

class DerivedClass : BaseClass
{
    public string call()
    {
        return "B";
    }
}

et le résultat est toujours le même:

de sortie : B

pour exécuter le test:

class Program
{
    static void Main(string[] args)
    {
        DerivedClass dc = new DerivedClass();
        Console.WriteLine(dc.call());
        Console.ReadKey();
    }
}

Ne le compilateur ajouter virtuel et remplacer automatiquement au moment de la compilation?

Je serais heureux si quelqu'un pouvait m'expliquer la raison de l'utilisation de virtual et override.

Vous obtiendrez un résultat différent si tu peux derivedClass de la classe de base avant d'appeler ajouter: 1 => 2 et 2 => 1
il n'y a pas de doublon, son sujet de la "la priorité et virtuel"
il serait vraiment beaucoup plus agréable à publier des exemples.... compilé.
Bien que la question est un peu différente, c'est le même principe. Vous êtes juste de l'incompréhension de la différence entre le polymorphisme et la méthode de masquage.
Votre test (évidemment) ne permet pas de démontrer la différence. Modifiez la ligne "BaseClass dc = new DerivedClass();" et essayez à nouveau. Maintenant, est-il une différence?

OriginalL'auteur Racooon | 2011-10-24