Es gibt viele Doppelfunktionen in den Namensräumen My.Computer.FileSystem
und System.IO.File
.
Also, was genau ist der Unterschied zwischen:
%Vor%und:
%Vor% Gibt es einen Leistungsunterschied? Was ist die Meinung von jedermann darüber, was die Lesefähigkeit ausmacht? Ich benutze persönlich den My.Computer
Namespace, aber das ist jetzt nur eine Gewohnheit.
My. * ist einfach eine Gruppe von Fassadenmusterklassen, die für VB.NET implementiert sind und allgemeine System.IO * (und andere) Operationen umfassen. Es gibt einen sehr winzigen Performance-Hit, da Sie eine zusätzliche Abstraktionsebene durchlaufen, aber Sie müssen entscheiden, ob es sich lohnt, dafür zu optimieren. Ich würde vorschlagen, den Weg zu wählen, der für Sie und andere in Ihrem Geschäft Sinn macht.
Wenn Sie den Code für My.Computer.FileSystem.CopyFile
mit .NET Reflector untersuchen, werden Sie feststellen, dass die Methode viele System.IO-Klassen wie Datei und Verzeichnis und insbesondere die Klasse "Kopieren, Verschieben und Löschen" umschließt. Snippet:
Praktisch nichts.
My.Computer
wurde VB als eine bequemere und verständliche Abstraktionsschicht für zugrunde liegende Funktionen hinzugefügt. Einige dieser Methoden fügen neue Funktionen hinzu, die meiner Meinung nach die einzige Möglichkeit wären, sie über System.IO.File
zu verwenden.
Ein Beispiel, in dem My.Computer
Funktionalität über System.IO.File
hinzufügen würde, ist Network.DownloadFile -Methode, wobei es die Möglichkeit hat, dem Benutzer einen Dialog anzuzeigen:
Wenn showUI auf True festgelegt ist, wird ein Dialogfeld angezeigt erscheint, zeigt den Fortschritt der Betrieb; Das Dialogfeld enthält a Abbrechen-Schaltfläche, die verwendet werden kann Die Operation abbrechen. Das Dialogfeld ist nicht modal und deshalb nicht Blockieren Sie Benutzereingaben für andere Fenster in das Programm.
Wenn Sie System.IO.File
bereits an Orten verwendet haben, kann ich aus Konsistenzgründen die Verwendung von My.Computer
nicht empfehlen. Nämlich nicht, Anrufe mit Methoden in My.Computer
und System.IO.File
zu mischen, bleiben Sie bei einem Namespace!
Der Namespace My
ist ein VB.Net-Konstrukt, das teilweise als Brücke zwischen VB6- und .Net-APIs dienen soll. Diese Methoden werden VB6-Semantik + Aussehen und Verhalten haben.
Wenn Sie ein VB6-Benutzer sind, der auf .NET umstellt, würde ich diese Methoden verwenden, da sie näher an dem von Ihnen erwarteten Verhalten liegen. Ansonsten würde ich bei den Standard-.Net-APIs von System.IO.File.Copy
BEARBEITEN
Mehrere Leute haben gefragt, ob ich den Namensraum My
für den Namensraum Microsoft.VisualBasic
falsch interpretiere. Ich bin nicht. Der My
-Namespace ist eine Menge Dinge, aber ein Element ist es, bestimmte Aufrufe in Methoden einzubetten, die in Microsoft.VisualBasic
weiterleiten. Zum Beispiel, wenn Sie den folgenden Code in ein VB.net-Projekt eingeben
Dies führt zu folgenden Ereignissen:
MyProject.Computer.FileSystem.CopyFile
wird in die Anwendung MyProject
und MyComputer
werden in der Baugruppe MyComputer
Typ leitet sich einfach von Microsoft.VisualBasic.Devices.Computer
ab
FileSystem.CopyFile
-Methode in FileSystemProxy.CopyFile
aufgelöst, die einfach an FileSystem.CopyFile
weiterleitet.
In Bezug auf die
%Vor%und
%Vor%Methode gibt es einen ganz wichtigen Unterschied.
Verwenden Sie
%Vor%Eine 'System.IO.IOException' wird ausgelöst, wenn das Verzeichnis nicht leer ist. Jedoch mit
%Vor%Die Standardaktion besteht darin, fortzufahren und die Datei zu löschen, es sei denn, Sie fügen einen zusätzlichen Parameter hinzu
Dies ist von dieser Seite
Public Shared Sub DeleteDirectory (Verzeichnis als String, onDirectoryNotEmpty als DeleteDirectoryOption )
Parameterverzeichnis
Typ: System.String Verzeichnis, das gelöscht werden soll. onDirectoryNotEmpty
Typ: Microsoft.VisualBasic.FileIO.DeleteDirectoryOption Gibt an, was zu tun ist, wenn ein zu löschendes Verzeichnis Dateien oder Verzeichnisse enthält. Der Standardwert ist DeleteDirectoryOption.DeleteAllContents.
Die andere Option besteht darin, DeleteDirectoryOption.ThrowIfDirectoryNonEmpty
anzugebenEs gibt auch andere Unterschiede, aber diese eine steht für mich eine Meile.
Tags und Links .net namespaces visual-studio vb.net coding-style