Overzicht van gedeeltelijke klassen in Visual Basic .NET

Gedeeltelijke klassen zijn een functie van VB.NET die bijna overal wordt gebruikt, maar er is niet veel over geschreven. Dit kan zijn omdat er nog niet veel voor de hand liggende "ontwikkelaarstoepassingen" voor zijn. Het primaire gebruik ligt in de manier waarop ASP.NET- en VB.NET-oplossingen worden gemaakt in Visual Studio, waar het een van die functies is die normaal gesproken 'verborgen' is.

Een gedeeltelijke klasse is gewoon een klassedefinitie die is opgesplitst in meer dan één fysiek bestand. Gedeeltelijke klassen maken geen verschil voor de compiler omdat alle bestanden waaruit een klasse bestaat eenvoudigweg worden samengevoegd tot één entiteit voor de compiler. Omdat de klassen gewoon samengevoegd en gecompileerd zijn, kun je geen talen combineren. Dat wil zeggen, je kunt niet één gedeeltelijke klasse hebben in C # en een andere in VB. Je kunt assemblages ook niet overspannen met gedeeltelijke klassen. Ze moeten allemaal in dezelfde vergadering zijn.

Dit wordt veel gebruikt door Visual Studio zelf, vooral op webpagina's waar het een sleutelbegrip is in "code achter" bestanden. We zullen zien hoe dit werkt in een Visual Studio, maar begrijpen wat er is veranderd in Visual Studio 2005 toen het werd geïntroduceerd, is een goed uitgangspunt.

instagram viewer

In Visual Studio 2003 was de "verborgen" code voor een Windows-toepassing allemaal in een sectie met de naam "Regio gemarkeerd" door Windows Form Designer gegenereerde code ". Maar het was nog steeds allemaal aanwezig in hetzelfde bestand en het was gemakkelijk om de code in de regio te bekijken en te wijzigen. Allemaal van de code is beschikbaar voor uw toepassing in .NET. Maar omdat een deel ervan code is die u moet gebruiken nooit geknoei, het werd bewaard in die verborgen regio. (Regio's kunnen nog steeds voor uw eigen code worden gebruikt, maar Visual Studio gebruikt ze niet meer.)

In Visual Studio 2005 (Framework 2.0) deed Microsoft ongeveer hetzelfde, maar ze verborgen de code op een andere plaats: een gedeeltelijke klasse in een afzonderlijk bestand. Je kunt dit onderaan de onderstaande afbeelding zien:


Klik hier om de illustratie weer te geven
Klik op de knop Terug in uw browser om terug te keren

Een van de syntaxisverschillen tussen Visual Basic en C # is nu dat C # dat vereist allemaal gedeeltelijke klassen worden gekwalificeerd met het trefwoord Gedeeltelijk maar VB doet dat niet. Uw hoofdformulier in VB.NET heeft geen speciale kwalificaties. Maar de standaardklasse-instructie voor een lege Windows-toepassing ziet er als volgt uit met C #:

openbare gedeeltelijke klasse Form1: Form

De ontwerpkeuzes van Microsoft voor dit soort dingen zijn interessant. Toen Paul Vick, de VB-ontwerper van Microsoft, in zijn blog over deze ontwerpkeuze schreef Panopticon Central, het debat hierover in de commentaren ging door voor pagina's en pagina's.

Laten we eens kijken hoe dit allemaal werkt met echte code op de volgende pagina.

Op de vorige pagina werd het concept van gedeeltelijke klassen uitgelegd. We converteren een enkele klasse in twee gedeeltelijke klassen op deze pagina.

Hier is een voorbeeldklasse met één methode en één eigenschap in een VB.NET-project

 Public Class CombinedClass. Private m_Property1 As String. Public Sub New (ByVal Value As String) m_Property1 = Waarde. Einde Sub. Public Sub Method1 () MessageBox. Show (m_Property1) End Sub. Property Property1 () Als tekenreeks. Krijgen. Retourneer m_Property1. Einde ophalen. Set (ByVal-waarde als tekenreeks) m_Property1 = waarde. Einde instellen. Einde eigendom. Eindklasse 

Deze klasse kan worden opgeroepen (bijvoorbeeld in de Click-gebeurteniscode voor een Button-object) met de code:

Dim ClassInstance As New _. CombinedClass ("Over Visual Basic gedeeltelijke klassen") KlasseInstantie. Methode1 ()

We kunnen de eigenschappen en methoden van de klasse in verschillende fysieke bestanden scheiden door twee nieuwe klassebestanden aan het project toe te voegen. Geef het eerste fysieke bestand een naam Gedeeltelijke.methoden.vb en noem de tweede Partial.properties.vb. De fysieke bestandsnamen moeten anders zijn, maar de gedeeltelijke klassenamen zullen hetzelfde zijn, zodat Visual Basic ze kan samenvoegen wanneer de code wordt gecompileerd.

Het is geen syntaxisvereiste, maar de meeste programmeurs volgen in Visual Studio het voorbeeld van het gebruik van "gestippelde" namen voor deze klassen. Visual Studio gebruikt bijvoorbeeld de standaardnaam Form1.Designer.vb voor de gedeeltelijke klasse voor een Windows-formulier. Vergeet niet om het gedeeltelijke trefwoord voor elke klasse toe te voegen en de interne klassenaam (niet de bestandsnaam) in dezelfde naam te wijzigen. Ik heb de interne klassenaam gebruikt: Gedeeltelijke klasse.

De onderstaande afbeelding toont alle code voor het voorbeeld en de code in actie.


Klik hier om de illustratie weer te geven
Klik op de knop Terug in uw browser om terug te keren

Visual Studio "verbergt" gedeeltelijke klassen zoals Form1.Designer.vb. Op de volgende pagina leren we hoe we dat kunnen doen met de gedeeltelijke klassen die we zojuist hebben gemaakt.

Op de vorige pagina's wordt het concept van gedeeltelijke klassen uitgelegd en wordt uitgelegd hoe u deze kunt coderen. Maar Microsoft gebruikt nog een truc met de gedeeltelijke klassen die worden gegenereerd door Visual Studio. Een van de redenen om ze te gebruiken is om toepassingslogica te scheiden van UI-code (gebruikersinterface). In een groot project kunnen deze twee soorten code zelfs door verschillende teams worden gemaakt. Als ze zich in verschillende bestanden bevinden, kunnen ze met veel meer flexibiliteit worden gemaakt en bijgewerkt. Maar Microsoft gaat nog een stap en verbergt de gedeeltelijke code ook in Solution Explorer. Stel dat we de gedeeltelijke klassen van methoden en eigenschappen in dit project wilden verbergen? Er is een manier, maar het is niet duidelijk en Microsoft vertelt je niet hoe.

Een van de redenen dat u het gebruik van gedeeltelijke klassen die door Microsoft worden aanbevolen niet ziet, is dat het nog niet echt goed wordt ondersteund in Visual Studio. Als u bijvoorbeeld de klassen Partial.methods.vb en Partial.properties.vb wilt verbergen die we zojuist hebben gemaakt, moet u de vbproj het dossier. Dit is een XML-bestand dat wordt niet eens weergegeven in Solution Explorer. U kunt het vinden met Windows Explorer samen met uw andere bestanden. Een vbproj-bestand wordt weergegeven in de onderstaande afbeelding.


Klik hier om de illustratie weer te geven
Klik op de knop Terug in uw browser om terug te keren

De manier waarop we dit gaan doen, is door een "root" -klasse toe te voegen die volledig leeg is (alleen de Class-header en de End Class-instructie blijven over) en beide deelklassen daarvan afhankelijk maken. Dus voeg nog een klasse toe met de naam PartialClassRoot.vb en verander opnieuw de interne naam in PartialClass zodat deze overeenkomt met de eerste twee. Deze keer heb ik dat gedaan niet gebruikte het trefwoord Gedeeltelijk alleen om overeen te komen met de manier waarop Visual Studio het doet.

Hier komt een beetje kennis van XML van pas. Aangezien dit bestand handmatig moet worden bijgewerkt, moet u de XML-syntaxis correct hebben. U kunt het bestand bewerken in elke ASCII-teksteditor - Kladblok werkt prima - of in een XML-editor. Het blijkt dat je een geweldige hebt in Visual Studio en dat is wat wordt weergegeven in de onderstaande afbeelding. Maar u kunt het vbproj-bestand niet tegelijkertijd bewerken als u het project waarin het zich bevindt, bewerkt. Sluit dus het project en open alleen het vbproj-bestand. U zou het bestand in het bewerkingsvenster moeten zien, zoals weergegeven in de onderstaande afbeelding.

(Merk op Compileren elementen voor elke klasse. Afhankelijk van subelementen moeten precies worden toegevoegd zoals weergegeven in de onderstaande afbeelding. Deze illustratie is gemaakt in VB 2005, maar is ook in VB 2008 getest.)


Klik hier om de illustratie weer te geven
Klik op de knop Terug in uw browser om terug te keren

Voor velen van ons is het waarschijnlijk genoeg om te weten dat er gedeeltelijke klassen zijn, zodat we weten wat ze zijn wanneer we in de toekomst een bug proberen op te sporen. Voor de ontwikkeling van grote en complexe systemen kan dit een klein wonder zijn, omdat ze kunnen helpen bij het organiseren van code op manieren die voorheen onmogelijk waren geweest. (U kunt ook gedeeltelijke structuren en gedeeltelijke interfaces hebben!) Maar sommige mensen hebben geconcludeerd dat Microsoft ze alleen om interne redenen heeft uitgevonden - om hun codegeneratie beter te laten werken. Auteur Paul Kimmel ging zelfs zo ver dat hij suggereerde dat Microsoft eigenlijk gedeeltelijke klassen maakte om hun kosten te verlagen door het gemakkelijker te maken om ontwikkelingswerk over de hele wereld uit te besteden.

Kan zijn. Het is het soort ding dat ze zouden kunnen doen.

instagram story viewer