86 votes

Console.WriteLine () et le fait que tant de surcharges d’argument ?

Donc, j'ai eu un peu de navigation à travers la documentation et remarqué que la Console.WriteLine() la méthode a plusieurs surcharges. En particulier, ma curiosité et partielle de la confusion se rapporte à ce qui suit:

public static void WriteLine(string format, params object[] arg);
public static void WriteLine(string format, object arg0);
public static void WriteLine(string format, object arg0, object arg1);
public static void WriteLine(string format, object arg0, object arg1, object arg2);
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3);

Il semble redondant. Quel est le besoin des quatre autres surcharges sur le dessus de la première? La première méthode est capable de faire tout ce que les autres méthodes peuvent le faire. Est-il un souci de performances qu'ils ont essayé de s'attaquer par des surcharges, ce qui gérer jusqu'à quatre arguments (la dernière)? Est la surcharge de passer par un tableau de quatre arguments assez grande pour permettre la nécessité pour ces surcharges?

102voto

JaredPar Points 333733

En général, il est exact que la première surcharge peut suffire pour les autres surcharges. Ce n'est pas strictement vrai, mais parce que l' params mot-clé ne peut pas être utilisé pour des dommages indirects des cas comme méthode de groupe de liaison. Par exemple

delegate void E(string format, object o1);
E e = Console.WriteLine;

L' params de surcharge ne peut pas satisfaire ce cas, il ne fonctionne que lorsque cette surcharge est présente

public static void WriteLine(string format, object arg0);

C'est un assez ésotérique cas bien. La plus importante des raisons sont les suivantes

  1. Pas tous de la CLI de la langue est nécessaire pour soutenir l' params mot-clé. Avoir les surcharges réduit le fardeau de ces langues, en supprimant la nécessité de créer manuellement un tableau pour un simple WriteLine " appel
  2. Les performances. L'appel de la params de surcharge des forces de l'appelant pour allouer un tableau, même si c'est fait implicitement par le compilateur. Les Allocations sont bon marché .Net, mais pas gratuitement. Peu de choses comme cela s'ajoutent rapidement surtout sur communément appelées méthodes comme Console.WriteLine. Les autres surcharges permet pour la plupart des cas à éviter cette allocation

37voto

jaket Points 2428

Les surcharges sont pour la commodité de C + c++ / programmes CLI où n’existe pas le mot clé params.

4voto

Alan Points 4653

Je pense que chacun d'entre vous les gars oublient que params a été introduit en c# 2.0. Par conséquent, les surcharges existent également de .NET 1.1, lorsque le mot clé params n’a pas.

1voto

dbw Points 3808

Je pense que la question a déjà le bon et explicatif des réponses par JaredPar et jaket , mais un point de ce que je pense peut être utile aussi,

Je pense que la facilité d'utilisation et la liberté pour les utilisateurs à utiliser l'une des fonctions ci-dessus selon les conditions requises, il y a moyen, il y a un besoin est beaucoup plus pratique plutôt que de les imposer pour créer un tableau, quand ils ont vraiment ne l'exigent pas.

Je pense aussi à l'époque où j'ai commencé à apprendre le C# , j'ai à peine utilisé les tableaux et l'utilisation des tableaux est une tâche compliquée pour moi, de lui attribuer, puis de les initialiser avec des valeurs propres était vraiment compliqué et prend beaucoup de temps aussi...

-3voto

Deepak Sharma Points 103

Ce n’est pas vraiment pour le problème de performances comme tel. Cependant, augmentant la facilité d’utilisation est une raison valable derrière elle.

Le code ci-dessous, vous donnera un petit aperçu.

Veuillez consulter le lien : http://msdn.microsoft.com/en-us/library/aa324774(v=vs.71).aspx for more information.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X