Probleme mit Anhang B Portabilität
Diese Klausel ist informativ.
B.1 Allgemein
Dieser Anhang sammelt einige Informationen zur Portabilität, die in dieser Spezifikation erscheint.
B.2 Nicht definiertes Verhalten
Das Verhalten ist unter folgenden Umständen nicht definiert:
- Das Verhalten der eingeschlossenen asynchronen Funktion, wenn die Implementierung der Schnittstellenmethoden
INotifyCompletion.OnCompleted
eines Awaiters ausgeführt wird undICriticalNotifyCompletion.UnsafeOnCompleted
nicht dazu führt, dass der Wiederaufnahmedelegat höchstens einmal aufgerufen wird (§12.9.8.4). - Übergeben von Zeigern als Bezugs- oder Ausgabeparameter (§23.3).
- Beim Ableiten des Ergebnisses der Konvertierung eines Zeigertyps in einen anderen wird der resultierende Zeiger nicht ordnungsgemäß für den Zeigertyp ausgerichtet. (§23.5.1).
- Wenn der unäre
*
Operator auf einen Zeiger angewendet wird, der einen ungültigen Wert enthält (§23.6.2). - Wenn ein Zeiger tiefgestellt ist, um auf ein out-of-bounds-Element zuzugreifen (§23.6.4).
- Ändern von Objekten vom verwalteten Typ durch Feste Zeiger (§23.7).
- Der neu zugeordnete
stackalloc
Speicherinhalt (§12.8.21). - Es wird versucht, eine negative Anzahl von Elementen
stackalloc
zuzuordnen(§12.8.21). - Implizite dynamische Konvertierungen (§10.2.10) von Eingabeparametern mit Wertargumenten (§12.6.4.2).
B.3 Implementierungsdefiniertes Verhalten
Eine konforme Implementierung ist erforderlich, um die Wahl des Verhaltens in jedem der in diesem Unterclause aufgeführten Bereiche zu dokumentieren. Im Folgenden sind implementierungsdefiniert:
- Die Behandlung des Unicode-NULL-Zeichens (U+0000) in einer Kompilierungseinheit. (§6.1)
- Das Verhalten, wenn ein Bezeichner nicht in Normalisierungsformular C gefunden wird. (§6.4.3)
- Der maximal zulässige Wert für
Decimal_Digit+
inPP_Line_Indicator
. (§6.5.8) - Die Auslegung der input_characters im pp_pragma-Text einer #pragma-Richtlinie. (§6.5.10)
- Die Werte aller Anwendungsparameter, die
Main
vor dem Anwendungsstart an die Hostumgebung übergeben werden. (§7.1) - Der Mechanismus zum Bestimmen, ob ein Programm als Klassenbibliothek oder als Anwendung kompiliert wird. (§7.1)
- Die Richtlinie oder Mechanismen, die von einer Implementierung für die Erstellung und Zerstörung von Anwendungsdomänen verwendet werden. (§7.1)
- Der Ausgangscode, wenn die effektive Einstiegspunktmethode aufgrund einer Ausnahme beendet wird. (§7.2)
- Gibt an, ob Finalizer als Teil der Beendigung der Anwendung ausgeführt werden. (§7.2)
- Gibt an, ob APIs zulassen, dass ein Finalizer mehrmals ausgeführt werden kann. (§7.9)
- Gibt an, ob Finalizer als Teil der Beendigung der Anwendung ausgeführt werden. (§7.9)
- Die API-Oberfläche, die über
Expression<TDelegate>
die Anforderung einerCompile
Methode hinaus bereitgestellt wird. (§8.6) - Die genaue Struktur der Ausdrucksstruktur sowie der genaue Prozess zum Erstellen der Struktur, wenn eine anonyme Funktion in eine Ausdrucksstruktur konvertiert wird. (§10.7.3)
- Der Grund, warum eine Konvertierung in einen kompatiblen Delegattyp zur Kompilierung fehlschlägt. (§10.7.3)
- Der Wert, der zurückgegeben wird, wenn eine Stapelzuordnung der Größe Null erfolgt. (§12.8.21)
- Ob eine
System.ArithmeticException
(oder eine Unterklasse davon) ausgelöst wird oder der Überlauf nicht gemeldet wird, wobei der resultierende Wert der linke Operand ist, wenn in einemunchecked
Kontext und dem linken Operanden einer ganzzahligen Division der maximale negativeint
oderlong
der rechte Operand ist–1
. (§12.10.3) - Wenn eine
System.ArithmeticException
(oder eine Unterklasse davon) ausgelöst wird, wenn ein Dezimal-Restvorgang ausgeführt wird. (§12.10.4) - Die Auswirkungen der Threadendung, wenn ein Thread keinen Handler für eine Ausnahme hat und der Thread selbst beendet wird. (§13.10.6)
- Der Mechanismus, mit dem die Verknüpfung mit einer externen Methode erreicht wird. (§15.6.8)
- Die Auswirkungen der Threadbeendigung, wenn für eine Ausnahme keine Übereinstimmungsklausel
catch
gefunden wird, und der Code, der den Thread anfangs gestartet hat, erreicht wird. (§21.4). - Eine Ausführungsumgebung kann zusätzliche Attribute bereitstellen, die sich auf die Ausführung eines C#-Programms auswirken. (§22.5.1)
- Die Zuordnungen zwischen Zeigern und ganzen Zahlen. (§23.5.1)
- Die Auswirkung des Anwendens des unären
*
Operators auf einennull
Zeiger. (§23.6.2) - Das Verhalten, wenn die Zeigerarithmetik die Domäne des Zeigertyps überläuft. (§23.6.6, §23.6.7)
- Das Ergebnis des
sizeof
Operators für nicht vordefinierte Werttypen. (§23.6.9) - Das Verhalten der
fixed
Anweisung, wenn der Arrayausdruck odernull
das Array null Elemente enthält. (§23.7) - Das Verhalten der
fixed
Anweisung, wenn der Zeichenfolgenausdruck istnull
. (§23.7)
B.4 Nicht angegebenes Verhalten
- Der Zeitpunkt, zu dem der Finalizer (falls vorhanden) für ein Objekt ausgeführt wird, sobald dieses Objekt zur Finalisierung berechtigt ist (§7.9).
- Die Darstellung von
true
(§8.3.9). - Der Wert des Ergebnisses beim Konvertieren von Out-of-Range-Werten von
float
oder Werten in einen integralen Typ in einemunchecked
Kontext (§10.3.2double
). - Das genaue Zielobjekt und die Zielmethode des aus einem anonymous_method_expression erzeugten Delegaten enthält (§10.7.2).
- Das Layout von Arrays, mit Ausnahme eines unsicheren Kontexts (§12.8.16.5).
- Gibt an, ob es eine andere Möglichkeit gibt, den Block einer anonymen Funktion auszuführen, als durch Auswertung und Aufruf des lambda_expression oder anonymous_method-Ausdrucks (§12.19.3).
- Die genaue Anzeigedauer der Initialisierung statischer Felder (§15.5.6.2).
- Das Ergebnis des Aufrufens
MoveNext
, wenn ein Enumerationsobjekt ausgeführt wird (§15.14.5.2). - Das Ergebnis des Zugriffs,
Current
wenn sich ein Enumerationsobjekt in den Zuständen "Before", "running" oder "after" befindet (§15.14.5.3). - Das Ergebnis des Aufrufens
Dispose
, wenn sich ein Enumerationsobjekt im ausführungszustand befindet (§15.14.5.4). - Die Attribute eines typs, der in mehreren Teilen deklariert ist, werden durch die Kombination der Attribute der einzelnen Teile (§22.3) bestimmt.
- Die Reihenfolge, in der Mitglieder in eine Struktur verpackt sind (§23.6.9).
- Eine Ausnahme tritt während der Finalizerausführung auf, und diese Ausnahme wird nicht abgefangen (§21.4).
- Wenn mehrere Member übereinstimmen, ist dieses Mitglied die Implementierung von
I.M
(§18.6.5).
B.5 Weitere Probleme
- Die genauen Ergebnisse der Gleitkommaauswertung können von einer Implementierung zu einer anderen variieren, da eine Implementierung solche Ausdrücke mit einem größeren Bereich und/oder einer höheren Genauigkeit bewerten darf als erforderlich (§8.3.7).
- Die CLI behält sich bestimmte Signaturen zur Kompatibilität mit anderen Programmiersprachen (§15.3.10) vor.
Ende des informativen Texts.
Zusammenarbeit auf GitHub
Die Quelle für diesen Inhalt finden Sie auf GitHub, wo Sie auch Issues und Pull Requests erstellen und überprüfen können. Weitere Informationen finden Sie in unserem Leitfaden für Mitwirkende.
ECMA C# draft specification