Comparer
String.Format("Hello {0}", "World");
avec
"Hello {0}".Format("World");
Pourquoi l' .Net les concepteurs de choisir une méthode statique sur une méthode d'instance? Qu'en pensez-vous?
Comparer
String.Format("Hello {0}", "World");
avec
"Hello {0}".Format("World");
Pourquoi l' .Net les concepteurs de choisir une méthode statique sur une méthode d'instance? Qu'en pensez-vous?
Parce que la méthode de mise en forme n'a rien à voir avec une chaîne de valeur actuelle.
C'est vrai pour toutes les méthodes string parce que .NET les chaînes sont immuables.
Si c'était non-statique, vous avez besoin d'une chaîne pour commencer.
Il n': la chaîne de format.
Je crois que c'est juste un autre exemple de nombreux défauts dans la conception de l' .NET plate-forme (et je ne dis pas cela comme une flamme; je trouve toujours de la .NET framework supérieur à la plupart des autres cadres).
Je ne connais pas la réponse, mais je suppose que cela a quelque chose à voir avec l'aspect de l'invocation de méthodes sur les littéraux de chaîne directement.
Si je me souviens bien (je n'ai pas vérifier car je n'ai pas un vieux IDE à portée de main), les premières versions de C# IDE avait du mal à détecter les appels de méthode contre les littéraux de chaîne dans IntelliSense, et qui a un grand impact sur la découverte de l'API. Si c'était le cas, tapez la suivante ne serait pas vous donner de l'aide:
"{0}".Format(12);
Si vous avez été forcé de type
new String("{0}").Format(12);
Il serait clair qu'il n'y a aucun avantage à faire de la méthode de mise en forme d'une méthode d'instance plutôt qu'une méthode statique.
L' .NET bibliothèques ont été conçus par un grand nombre des mêmes personnes qui nous ont donné MFC, et de la classe String en particulier porte une forte ressemblance avec la classe CString dans le MFC. MFC possède une instance méthode Format (qui utilise printf style de codes de mise en forme plutôt que le frisé corset de style de .NET) qui est douloureux, car il n'y a pas une telle chose comme une CString littérale. Ainsi, dans une MFC base de code que j'ai travaillé sur je vois beaucoup de ceci:
CString csTemp = "";
csTemp.Format("Some string: %s", szFoo);
ce qui est douloureux. (Je ne dis pas que le code ci-dessus est un excellent moyen de faire des choses, même dans les MFC, mais il semble que ce soit la manière que la plupart des développeurs sur le projet appris à utiliser CString::Format). Venant de ce patrimoine, je peux imaginer que l'API concepteurs ont essayé d'éviter ce genre de situation.
Eh bien, je suppose que vous devez être assez particulier, mais comme les gens disent, il fait plus de sens pour la Chaîne.Format statique en raison de l'implicite de la sémantique. Considérer:
"Hello {0}".Format("World"); // this makes it sound like Format *modifies*
// the string, which is not possible as
// strings are immutable.
string[] parts = "Hello World".Split(' '); // this however sounds right,
// because it implies that you
// split an existing string into
// two *new* strings.
La première chose que j'ai fait quand j'ai fait la mise à niveau de VS2008 et C#3, a été pour ce faire
public static string F( this string format, params object[] args )
{
return String.Format(format, args);
}
Donc, je peux maintenant changer mon code de
String.Format("Hello {0}", Name);
pour
"Hello {0}".F(Name);
ce que je trouve d'une qualité nettement supérieure.
Quant à savoir pourquoi l' .NET les concepteurs l'ont choisi? Qui sait. C'est entièrementsubjectif. Mon argent est sur
Il n'y a pas vraiment de toute autre raison valable que je peux trouver
Je pense que c'est parce que le Format n'est pas prendre une chaîne en soi, mais une "chaîne de format". La plupart des chaînes sont égales à des choses comme "Bob Smith" ou "1010, rue Principale St" ou qu'avez-vous et de ne pas "Bonjour {0}", généralement vous ne mettez ces chaînes de formatage lorsque vous essayez d'utiliser un modèle pour créer une autre chaîne, comme une méthode de fabrique, et par conséquent, il se prête à une méthode statique.
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.