Delen via


Problemen met betrekking tot portabiliteit in bijlage B

Deze component is informatief.

B.1 Algemeen

In deze bijlage wordt informatie verzameld over de draagbaarheid die in deze specificatie wordt weergegeven.

B.2 Niet-gedefinieerd gedrag

Het gedrag is niet gedefinieerd in de volgende omstandigheden:

  1. Het gedrag van de ingesloten asynchrone functie wanneer de implementatie van de interfacemethoden INotifyCompletion.OnCompleted door een wachter wordt uitgevoerd en ICriticalNotifyCompletion.UnsafeOnCompleted zorgt er niet voor dat de gemachtigde voor hervatting maximaal één keer wordt aangeroepen (§12.9.8.4).
  2. Aanwijzers doorgeven als referentie- of uitvoerparameters (§23.3).
  3. Wanneer u het resultaat van het converteren van een aanwijzer naar het andere converteert en de resulterende aanwijzer niet juist is uitgelijnd voor het punt-naar-type. (§23.5.1).
  4. Wanneer de unaire * operator wordt toegepast op een aanwijzer met een ongeldige waarde (§23.6.2).
  5. Wanneer een aanwijzer wordt subscripted om toegang te krijgen tot een element buiten de grenzen (§23.6.4).
  6. Objecten van het beheerde type wijzigen via vaste aanwijzers (§23.7).
  7. De inhoud van het geheugen dat nieuw is toegewezen door stackalloc (§12.8.21).
  8. Een negatief aantal items toewijzen met behulp stackallocvan (§12.8.21).
  9. Impliciete dynamische conversies (§10.2.10) van invoerparameters met waardeargumenten (§12.6.4.2).

Door implementatie gedefinieerd gedrag B.3

Een conforme implementatie is vereist om de keuze van het gedrag te documenteren in elk van de gebieden die in deze subclause worden vermeld. De volgende zijn gedefinieerd door de implementatie:

  1. De verwerking van het Unicode NULL-teken (U+0000) in een compilatie-eenheid. (§6.1)
  2. Het gedrag wanneer er geen id in Normalisatieformulier C wordt aangetroffen. (§6.4.3)
  3. De maximumwaarde die is toegestaan in Decimal_Digit+ PP_Line_Indicator. (§6.5.8)
  4. De interpretatie van de input_characters in de pp_pragma tekst van een #pragma richtlijn. (§6.5.10)
  5. De waarden van toepassingsparameters die worden doorgegeven Main door de hostomgeving vóór het opstarten van de toepassing. (§7.1)
  6. Het mechanisme voor het bepalen of een programma wordt gecompileerd als een klassebibliotheek of als een toepassing. (§7.1)
  7. Het beleid of de mechanismen die worden gebruikt door een implementatie voor het maken en vernietigen van toepassingsdomeinen. (§7.1)
  8. De afsluitcode als de effectieve ingangspuntmethode wordt beëindigd vanwege een uitzondering. (§7.2)
  9. Of finalizers al dan niet worden uitgevoerd als onderdeel van het beëindigen van de toepassing. (§7.2)
  10. Of API's toestaan dat een finalizer meer dan één keer wordt uitgevoerd. (§7.9)
  11. Of finalizers al dan niet worden uitgevoerd als onderdeel van het beëindigen van de toepassing. (§7.9)
  12. Het API-oppervlak dat wordt geleverd door Expression<TDelegate> buiten de vereiste voor een Compile methode. (§8.6)
  13. De exacte structuur van de expressiestructuur, evenals het exacte proces voor het maken ervan, wanneer een anonieme functie wordt geconverteerd naar een expressiestructuur. (§10.7.3)
  14. De reden waarom een conversie naar een compatibel gemachtigdetype kan mislukken tijdens het compileren. (§10.7.3)
  15. De waarde die wordt geretourneerd wanneer een stacktoewijzing van grootte nul wordt gemaakt. (§12.8.21)
  16. Of een System.ArithmeticException (of subklasse daarvan) wordt gegenereerd of dat de overloop niet wordt gerapporteerd met de resulterende waarde die van de linkeroperand is, wanneer in een unchecked context en de linkeroperand van een gehele getalverdeling de maximale negatieve int waarde of long waarde is en de rechteroperand is –1. (§12.10.3)
  17. Wanneer een System.ArithmeticException (of subklasse daarvan) wordt gegenereerd bij het uitvoeren van een decimale restbewerking. (§12.10.4)
  18. De impact van threadbeëindiging wanneer een thread geen handler heeft voor een uitzondering en de thread zelf wordt beëindigd. (§13.10.6)
  19. Het mechanisme waarmee koppeling naar een externe methode wordt bereikt. (§15.6.8)
  20. De impact van threadbeëindiging wanneer er geen overeenkomende catch component wordt gevonden voor een uitzondering en de code die in eerste instantie met die thread is gestart, wordt bereikt. (§21.4).
  21. Een uitvoeringsomgeving kan aanvullende kenmerken bieden die van invloed zijn op de uitvoering van een C#-programma. (§22.5.1)
  22. De toewijzingen tussen aanwijzers en gehele getallen. (§23.5.1)
  23. Het effect van het toepassen van de unaire * operator op een null aanwijzer. (§23.6.2)
  24. Het gedrag wanneer de rekenkundige aanwijzer het domein van het type aanwijzer overloopt. (§23.6.6, §23.6.7)
  25. Het resultaat van de sizeof operator voor niet-vooraf gedefinieerde waardetypen. (§23.6.9)
  26. Het gedrag van de fixed instructie als de matrixexpressie is null of als de matrix nul elementen heeft. (§23.7)
  27. Het gedrag van de fixed instructie als de tekenreeksexpressie is null. (§23.7)

B.4 Niet-gespecificeerd gedrag

  1. Het tijdstip waarop de finalizer (indien aanwezig) voor een object wordt uitgevoerd, zodra dat object in aanmerking komt voor voltooien (§7.9).
  2. De weergave van true (§8.3.9).
  3. De waarde van het resultaat bij het converteren van buiten-bereikwaarden van float of waarden naar een integraal type in een unchecked context (§10.3.2double).
  4. Het exacte doelobject en de doelmethode van de gemachtigde die is geproduceerd op basis van een anonymous_method_expression bevat (§10.7.2).
  5. De indeling van matrices, behalve in een onveilige context (§12.8.16.5).
  6. Of er een manier is om het blok van een andere anonieme functie uit te voeren dan door middel van evaluatie en aanroep van de lambda_expression of anonymous_method-expressie (§12.19.3).
  7. De exacte timing van de initialisatie van statische velden (§15.5.6.2).
  8. Het resultaat van aanroepen MoveNext wanneer een enumerator-object wordt uitgevoerd (§15.14.5.2).
  9. Het resultaat van toegang wanneer een enumerator-object zich in de voor- of nastatussen Current bevindt (§15.14.5.3).
  10. Het resultaat van aanroepen Dispose wanneer een enumeratorobject de status Actief heeft (§15.14.5.4).
  11. De kenmerken van een type dat in meerdere delen is gedeclareerd, worden bepaald door de kenmerken van elk van de onderdelen te combineren (§22.3).
  12. De volgorde waarin leden zijn verpakt in een struct (§23.6.9).
  13. Er treedt een uitzondering op tijdens de uitvoering van de finalizer en deze uitzondering wordt niet opgevangen (§21.4).
  14. Als er meer dan één lid overeenkomt, is dit lid de implementatie van I.M (§18.6.5).

B.5 Andere problemen

  1. De exacte resultaten van drijvendekommage-expressie-evaluatie kunnen variëren van de ene implementatie naar de andere, omdat een implementatie dergelijke expressies mag evalueren met een groter bereik en/of precisie dan vereist is (§8.3.7).
  2. De CLI behoudt bepaalde handtekeningen voor compatibiliteit met andere programmeertalen (§15.3.10).

Einde van informatieve tekst.