C# paramètres facultatifs sur les méthodes de remplacement

Semble que dans .NET Framework il y a un problème avec les paramètres facultatifs lorsque vous remplacez la méthode. La sortie du code ci-dessous:
"bbb"
"aaa"
. Mais le résultat que j'attends est:
"bbb"
"bbb"
.Est-il une solution pour ce. Je sais que cela peut être résolu avec la surcharge de méthode, mais vous demandez la raison pour cela. Le code fonctionne très bien en Mono.

class Program
{
    class AAA
    {
        public virtual void MyMethod(string s = "aaa")
        {
            Console.WriteLine(s);
        }

        public virtual void MyMethod2()
        {
            MyMethod();
        }
    }

    class BBB : AAA
    {
        public override void MyMethod(string s = "bbb")
        {
            base.MyMethod(s);
        }

        public override void MyMethod2()
        {
            MyMethod();
        }
    }

    static void Main(string[] args)
    {
        BBB asd = new BBB();
        asd.MyMethod();
        asd.MyMethod2();
    }
}
  • Les paramètres facultatifs sont mauvais, mmkay! TBH, jamais je n'ai même pris la peine de les utiliser.
  • Il est très usfull fonctionnalité. Rejeter une fonctionnalité dans tous les scénarios n'est pas sage.
  • Je suis curieux de savoir si ce qui se passe dans VB.Net aussi et n'est pas spécifique à compilateur C#..aurez besoin de vérifier..
  • Cela ressemble à un bug dans le Mono.
  • comment alors? nous avons ici un exemple, lorsqu'il est utilisé en dehors de la classe, le substituée version est inspecté par défaut, et à l'intérieur de la classe des base version est inspecté pour la valeur par défaut, qui n'est pas cohérent
  • En fait, lors de l'examen, les deux comportements semblent raisonnables.
  • avez-vous vu des avertissements du compilateur tandis qu'au-dessus de code a été compilé?
  • À l'aide de C# 4.0 (à partir de Microsoft, le niveau d'Avertissement 4 activé), je n'ai pas.
  • Je suis sûr qu'il y a de bonnes raisons de l'utiliser. Mais je suis encore à trouver un tel cas. Normalement (lire idéalement), vous voulez que votre défaut d'être de tout type et pas seulement un très sous-ensemble limité de types (aka primitives et de quelques autres). PS: je n'ai pas dit "je suis le rejet de la fonctionnalité dans tous les scénarios", vous ne savez pas comment vous en êtes arrivé à cette conclusion.
  • Veuillez tester avec les deux valeurs par défaut étant le même. Je soupçonne une incompatibilité de signature. Qui serait de tout coeur de le sucer....
  • Voir aussi stackoverflow.com/questions/241134/...
  • "Je n'ai pas dit" je suis le rejet de la fonctionnalité dans tous les scénarios'" -- bien sûr, vous l'avez fait. "vous ne savez pas comment vous en êtes venu à cette conclusion" -- euh, "paramètres Facultatifs sont mauvais, mmkay!"

InformationsquelleAutor SARI | 2012-01-18