| hoofdstuk |
18. 19. 20.  |
| onderwerp |
19.1. 19.2. Partial Methods 20.1.  |
| rubrieken | - |
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Vanaf Visual Basic 9.0 (2008) kunnen methods als Partial worden gedefinieerd. Deze methods kunnen dan met implementatie aangevuld worden op een andere plaats binnen de klassedefinitie.
De Partial methods kunnen enkel Private Subs zijn zonder implementatie. Visual Basic 2010 Broncode Class SomeClass Partial Private Sub somePartialMethod1() End Sub Partial Private Sub somePartialMethod2() End Sub Private Sub somePartialMethod1() Console.WriteLine( "somePartialMethod1") End Sub Public Sub TestSomePartialMethod1() somePartialMethod1() End Sub Public Sub TestSomePartialMethod2() somePartialMethod2() End SubEnd ClassPartial Class SomeClass Private Sub somePartialMethod2() Console.WriteLine( "somePartialMethod2") End SubEnd ClassClass Example1 Public Shared Sub Main() Dim someObject As New SomeClass someObject.TestSomePartialMethod1() someObject.TestSomePartialMethod2() Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output somePartialMethod1
somePartialMethod2 Enkel de implementatieloze methods worden gemarkeerd met het keyword Partial. De aanvullende implementaties mogen dit keyword niet opnemen in hun signatuur.
Het is technisch gezien mogelijk om binnen dezelfde ( partial ) klassedefinitie - als waar de Partial method is gedefinieerd - de aanvullende implementatie te definiëren (1). Toch zal doorgaans de aangevulde implementatie zich in een andere partial definitie van deze klasse bevinden (2).
Partial methods worden vooral toegepast in situatie waar men wil vermijden dat de code - gegenereerd door bepaalde codegeneratie - wordt aangepast.
Veronderstel dat onderstaande klasse Stock door een codegenerator werd gecreëerd.
Indien men het toe wil laten, de programmeur te laten bepalen wat er dient te gebeuren bij het instellen van de Price eigenschap. Dan kan de generator nu Partial methods definiëren en aanroepen in de relevante setter. Visual Basic 2010 Broncode # Region "Some Generated Code"Partial Class Stock Private m_Price As Decimal Public Property Price() As Decimal Get Return m_Price End Get Set( ByVal value As Decimal) onPriceChanging(value) m_Price = value onPriceChanged() End Set End Property Partial Private Sub onPriceChanging( ByVal value As Decimal) End Sub Partial Private Sub onPriceChanged() End SubEnd Class# End RegionDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Een programmeur die wil bepalen wat er moet gebeuren bij het instellen van de Price eigenschap heeft nu de mogelijkheid aanvullende implementaties te definiëren. Visual Basic 2010 Broncode Partial Class Stock Private Sub onPriceChanging( ByVal value As Decimal) Console.WriteLine( "Doing something when the price is changing to " & _ value & ".") End Sub Private Sub onPriceChanged() Console.WriteLine( "Doing something when the price changed.") End SubEnd ClassClass Example3 Public Shared Sub Main() Dim stock1 As New Stock stock1.Price = 10 Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output Doing something when the price is changing to 10.
Doing something when the price changed. Om performantieredenen zal indien geen aanvullende implementatie is voorzien voor een Partial method, de compiler de call naar deze method negeren. Visual Basic 2010 Broncode Partial Class SomeClass Partial Private Sub somePartialMethod3() End Sub Public Sub TestSomePartialMethod3() somePartialMethod3() End SubEnd ClassClass Example2 Public Shared Sub Main() Dim someObject As New SomeClass someObject.TestSomePartialMethod3() Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Zo zal in bovenstaand voorbeeld de call naar method somePartialMethod3 (1) door de compiler genegeerd worden.
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|