2009-08-14 9 views
0

Ich bin neu in der Entwicklung mit Visual Basic, aber habe viel Erfahrung in C#/C/C++/JAVA/Haskell und ein paar andere.Visual Basic Typing und Casting Frage

Gibt es einen Grund, warum ich Code behalte und Codebeispiele finde, wo die Typdeklaration einfach faul erscheint? Ich habe unzählige Strings gesehen, die immer nur als String-Typ verwendet werden, der als Objekt deklariert wurde. Bevor die objektorientierten Funktionen von VB.NET eingeführt wurden, musste sichergestellt werden, dass die Methoden mehrere Typen annehmen konnten. Warum sollte jemand das tun?

Antwort

1

Einige VB6-Experten, zum Beispiel "the Mandelbrot Set", rieten mit Variants für alle Variablen. Du könntest es frühe Ente tippen nennen ?! Das war ziemlich umstritten - viele von uns dachten, es sei ein Rezept für eine Katastrophe.

Aber es muss eine Menge Code wie dieser da draußen sein. Bevor modern conversion tools angezeigt wurde, wäre ein Upgrade auf VB.NET very hard. Das Visual Studio-Upgrade-Tool wird bei jeder Anzeige einer Variante einfach in Panik versetzt. Wenn Sie wirklich, wirklich, mit begrenzten Ressourcen aktualisieren müssen, nehme ich an, dass die Änderung aller Varianten zu Object die am wenigsten schlechte Option ist. Offensichtlich wäre der resultierende Code schrecklich.

Sie könnten schrittweise umgestalten. Wenn Sie an einem Codebereich arbeiten, können Sie die Deklarationen in einen spezifischeren Typ ändern.

+0

Also, wie wolltest du dieses Meer von Varianten debuggen: warte auf etwas, das zur Laufzeit schief läuft und hoffe auf einen hilfreichen Fehler? Hat diese Art der Codierung tatsächlich funktioniert? Große Antwort obwohl. – user142350

+0

Nun, ich habe diese Methode wie die Pest immer gemieden, also nehme ich an, ich weiß nicht, ob es wirklich funktioniert hat oder nicht! Aber ich wäre ziemlich überrascht, wenn es funktionieren würde. – MarkJ

5

Bei einer Vermutung ... Faulheit und alte VB6 Gewohnheiten getragen werden.

+0

Also das war so Methoden konnten mehrere Mitglieder aufnehmen, richtig? Anstatt Funktionen zu überladen, würden Sie eine Methode erstellen, die ein beliebiges akzeptiert und dann etwas damit macht? – user142350

+0

Schließen, aber höchstwahrscheinlich, so dass sie den tatsächlichen Datentyp nicht angeben mussten. Eine Methode zu haben, die eine variable Liste von Parametern annimmt, unterscheidet sich von einer, die einen Parameter eines beliebigen Typs akzeptiert. Es klingt wie das, was Sie haben, ist das Szenario "ein Parameter eines beliebigen Typs", das der Verwendung einer Variante in VB6 entsprechen würde. –

3

In VB6 gab es die Variante Typ, die verschiedene Arten annehmen konnte und es sollte mit Vorsicht und Sorgfalt verwendet werden. Wenn .Net kam die einzige Konvertierung für das (neben der Änderung Ihres Codes viel) würde Objekt als Typ verwendet haben.

Ich würde es auf jeden Fall rufe einen Kater oder eine Codeumwandlung Wirkung von VB6, wenn der Code, dass die Flexibilität zu benötigen scheint, wie Sie für ein Verfahren beschrieben, in mehreren Typen zu nehmen.

Wenn Sie jedoch Code für String-Typen sehen, die als Objekte deklariert wurden, ist dies weit schlimmer als nur Faulheit und ein Kater von VB6! Es klingt wie schrecklich schlechtes Design und mangelnde Sorgfalt.