Ich habe Anders 'Vortrag über C # 4.0 und eine Vorschau auf C # 5.0 gesehen und darüber nachgedacht, wann optionale Parameter in C # verfügbar sind. Was ist die empfohlene Methode, um Methoden zu deklarieren, für die nicht alle Parameter angegeben werden müssen?
Zum Beispiel hat so etwas wie die FileStream
Klasse ungefähr fünfzehn verschiedene Konstruktoren, die in logische 'Familien' unterteilt werden können, z. B. die folgenden aus einer Zeichenfolge, die aus einer IntPtr
und die aus einer SafeFileHandle
.
FileStream(string,FileMode);
FileStream(string,FileMode,FileAccess);
FileStream(string,FileMode,FileAccess,FileShare);
FileStream(string,FileMode,FileAccess,FileShare,int);
FileStream(string,FileMode,FileAccess,FileShare,int,bool);
Es scheint mir, dass diese Art von Muster vereinfacht werden könnte, indem stattdessen drei Konstruktoren verwendet werden und optionale Parameter für diejenigen verwendet werden, die standardmäßig verwendet werden können, wodurch die verschiedenen Konstruktorfamilien deutlicher werden würden [Anmerkung: Ich weiß, dass diese Änderung nicht möglich ist gemacht in der BCL, ich spreche hypothetisch für diese Art von Situation].
Was denken Sie? Wird es ab C # 4.0 sinnvoller sein, eng verwandte Gruppen von Konstruktoren und Methoden zu einer einzigen Methode mit optionalen Parametern zu machen, oder gibt es einen guten Grund, sich an den traditionellen Mechanismus mit vielen Überladungen zu halten?