Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
C.1 Általános
A megfelelő C#-megvalósításnak biztosítania kell a meghatározott szemantikával rendelkező típusok minimális készletét. Ezek a típusok és tagjaik betűrendben, névtér és típus szerint vannak felsorolva. Az ilyen típusok és tagjaik formális meghatározásához tekintse meg az ISO/IEC 23271:2012 Common Language Infrastructure (CLI) IV. partíciót; Alaposztálykódtár (BCL), kiterjesztett numerikus kódtár és kiterjesztett tömbtár, amelyeket a jelen specifikáció tartalmaz.
Ez a szöveg informatív.
A standard kódtár a megfelelő C#-implementációhoz szükséges minimális típus- és tagkészlet. Ezért csak azokat a tagokat tartalmazza, amelyekre a C# nyelvi specifikációja kifejezetten szükség van.
A C# megfelelő implementációja várhatóan jelentősen szélesebb tárat biztosít, amely lehetővé teszi a hasznos programok írását. Egy megfelelő implementáció például kibővítheti ezt a kódtárat a következővel:
- Névterek hozzáadása.
- Típusok hozzáadása.
- Tagok hozzáadása nem felületi típusokhoz.
- Beavatkozó alaposztályok vagy interfészek hozzáadása.
- A strukturálás és az osztálytípusok további interfészeket implementálnak.
- Attribútumok hozzáadása (a nem a
ConditionalAttribute
meglévő típusokhoz és tagokhoz).
Az informatív szöveg vége.
Az ISO/IEC 23271 szabványkódtártípusai
Megjegyzés: Néhány
struct
alábbi típus rendelkezik areadonly
módosítóval. Ez a módosító nem volt elérhető az ISO/IEC 23271 kiadásakor, de a specifikáció megfelelő implementációihoz szükséges. végjegyzet
namespace System
{
public delegate void Action();
public class ArgumentException : SystemException
{
public ArgumentException();
public ArgumentException(string? message);
public ArgumentException(string? message, Exception? innerException);
}
public class ArithmeticException : Exception
{
public ArithmeticException();
public ArithmeticException(string? message);
public ArithmeticException(string? message, Exception? innerException);
}
public abstract class Array : IList, ICollection, IEnumerable
{
public int Length { get; }
public int Rank { get; }
public int GetLength(int dimension);
}
public class ArrayTypeMismatchException : Exception
{
public ArrayTypeMismatchException();
public ArrayTypeMismatchException(string? message);
public ArrayTypeMismatchException(string? message,
Exception? innerException);
}
[AttributeUsageAttribute(AttributeTargets.All, Inherited = true,
AllowMultiple = false)]
public abstract class Attribute
{
protected Attribute();
}
public enum AttributeTargets
{
Assembly = 0x1,
Module = 0x2,
Class = 0x4,
Struct = 0x8,
Enum = 0x10,
Constructor = 0x20,
Method = 0x40,
Property = 0x80,
Field = 0x100,
Event = 0x200,
Interface = 0x400,
Parameter = 0x800,
Delegate = 0x1000,
ReturnValue = 0x2000,
GenericParameter = 0x4000,
All = 0x7FFF
}
[AttributeUsageAttribute(AttributeTargets.Class, Inherited = true)]
public sealed class AttributeUsageAttribute : Attribute
{
public AttributeUsageAttribute(AttributeTargets validOn);
public bool AllowMultiple { get; set; }
public bool Inherited { get; set; }
public AttributeTargets ValidOn { get; }
}
public readonly struct Boolean { }
public readonly struct Byte { }
public readonly struct Char { }
public readonly struct Decimal { }
public abstract class Delegate { }
public class DivideByZeroException : ArithmeticException
{
public DivideByZeroException();
public DivideByZeroException(string? message);
public DivideByZeroException(string? message, Exception? innerException);
}
public readonly struct Double { }
public abstract class Enum : ValueType
{
protected Enum();
}
public class Exception
{
public Exception();
public Exception(string? message);
public Exception(string? message, Exception? innerException);
public sealed Exception? InnerException { get; }
public virtual string Message { get; }
}
public class GC { }
public interface IDisposable
{
void Dispose();
}
public interface IFormattable { }
public sealed class IndexOutOfRangeException : Exception
{
public IndexOutOfRangeException();
public IndexOutOfRangeException(string? message);
public IndexOutOfRangeException(string? message,
Exception? innerException);
}
public readonly struct Int16 { }
public readonly struct Int32 { }
public readonly struct Int64 { }
public readonly struct IntPtr { }
public class InvalidCastException : Exception
{
public InvalidCastException();
public InvalidCastException(string? message);
public InvalidCastException(string? message, Exception? innerException);
}
public class InvalidOperationException : Exception
{
public InvalidOperationException();
public InvalidOperationException(string? message);
public InvalidOperationException(string? message,
Exception? innerException);
}
public class NotSupportedException : Exception
{
public NotSupportedException();
public NotSupportedException(string? message);
public NotSupportedException(string? message,
Exception? innerException);
}
public struct Nullable<T>
{
public bool HasValue { get; }
public T Value { get; }
}
public class NullReferenceException : Exception
{
public NullReferenceException();
public NullReferenceException(string? message);
public NullReferenceException(string? message, Exception? innerException);
}
public class Object
{
public Object();
~Object();
public virtual bool Equals(object obj);
public virtual int GetHashCode();
public Type GetType();
public virtual string? ToString();
}
[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Enum | AttributeTargets.Interface |
AttributeTargets.Constructor | AttributeTargets.Method |
AttributeTargets.Property | AttributeTargets.Field |
AttributeTargets.Event | AttributeTargets.Delegate, Inherited = false)]
public sealed class ObsoleteAttribute : Attribute
{
public ObsoleteAttribute();
public ObsoleteAttribute(string? message);
public ObsoleteAttribute(string? message, bool error);
public bool IsError { get; }
public string Message? { get; }
}
public class OutOfMemoryException : Exception
{
public OutOfMemoryException();
public OutOfMemoryException(string? message);
public OutOfMemoryException(string? message, Exception? innerException);
}
public class OverflowException : ArithmeticException
{
public OverflowException();
public OverflowException(string? message);
public OverflowException(string? message, Exception? innerException);
}
public readonly struct SByte { }
public readonly struct Single { }
public sealed class StackOverflowException : Exception
{
public StackOverflowException();
public StackOverflowException(string? message);
public StackOverflowException(string? message, Exception? innerException);
}
public sealed class String : IEnumerable<Char>, IEnumerable
{
public int Length { get; }
public char this [int index] { get; }
public static string Format(string format, params object?[] args);
}
public class SystemException : Exception
{
public SystemException();
public SystemException(string? message);
public SystemException(string? message, Exception? innerException);
}
public abstract class Type : MemberInfo { }
public sealed class TypeInitializationException : Exception
{
public TypeInitializationException(string fullTypeName,
Exception? innerException);
}
public readonly struct UInt16 { }
public readonly struct UInt32 { }
public readonly struct UInt64 { }
public readonly struct UIntPtr { }
public abstract class ValueType
{
protected ValueType();
}
}
namespace System.Collections
{
public interface ICollection : IEnumerable
{
int Count { get; }
bool IsSynchronized { get; }
object SyncRoot { get; }
void CopyTo(Array array, int index);
}
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
public interface IList : ICollection, IEnumerable
{
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object? this [int index] { get; set; }
int Add(object? value);
void Clear();
bool Contains(object? value);
int IndexOf(object? value);
void Insert(int index, object? value);
void Remove(object? value);
void RemoveAt(int index);
}
}
namespace System.Collections.Generic
{
public interface ICollection<T> : IEnumerable<T>
{
int Count { get; }
bool IsReadOnly { get; }
void Add(T item);
void Clear();
bool Contains(T item);
void CopyTo(T[] array, int arrayIndex);
bool Remove(T item);
}
public interface IEnumerable<T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
public interface IEnumerator<T> : IDisposable, IEnumerator
{
T Current { get; }
}
public interface IList<T> : ICollection<T>
{
T this [int index] { get; set; }
int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
}
}
namespace System.Diagnostics
{
[AttributeUsageAttribute(AttributeTargets.Method | AttributeTargets.Class,
AllowMultiple = true)]
public sealed class ConditionalAttribute : Attribute
{
public ConditionalAttribute(string conditionString);
public string ConditionString { get; }
}
}
namespace System.Reflection
{
public abstract class MemberInfo
{
protected MemberInfo();
}
}
namespace System.Runtime.CompilerServices
{
public sealed class IndexerNameAttribute : Attribute
{
public IndexerNameAttribute(string indexerName);
}
public static class Unsafe
{
public static ref T NullRef<T>();
}
}
namespace System.Threading
{
public static class Monitor
{
public static void Enter(object obj);
public static void Exit(object obj);
}
}
Az ISO/IEC 23271-ben nem definiált standard kódtártípusok
A következő típusokat, beleértve a felsorolt tagokat, egy megfelelő szabványos könyvtárban kell meghatározni. (Ezek a típusok az ISO/IEC 23271 jövőbeli kiadásában definiálhatók.) Az ilyen típusok közül soknak több tagja lesz elérhető, mint a felsoroltak.
A megfelelő implementációk kiegészítő módszereket biztosíthatnak Task.GetAwaiter()
és Task<TResult>.GetAwaiter()
alkalmazhatnak.
namespace System
{
public interface IAsyncDisposable
{
ValueTask DisposeAsync();
}
public class FormattableString : IFormattable { }
public class OperationCanceledException : Exception
{
public OperationCanceledException();
public OperationCanceledException(string? message);
public OperationCanceledException(string? message, Exception? innerException);
}
public readonly ref struct ReadOnlySpan<T>
{
public int Length { get; }
public ref readonly T this[int index] { get; }
}
public readonly ref struct Span<T>
{
public int Length { get; }
public ref T this[int index] { get; }
public static implicit operator ReadOnlySpan<T>(Span<T> span);
}
public struct ValueTuple<T1>
{
public T1 Item1;
public ValueTuple(T1 item1);
}
public struct ValueTuple<T1, T2>
{
public T1 Item1;
public T2 Item2;
public ValueTuple(T1 item1, T2 item2);
}
public struct ValueTuple<T1, T2, T3>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public ValueTuple(T1 item1, T2 item2, T3 item3);
}
public struct ValueTuple<T1, T2, T3, T4>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4);
}
public struct ValueTuple<T1, T2, T3, T4, T5>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public T5 Item5;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5);
}
public struct ValueTuple<T1, T2, T3, T4, T5, T6>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public T5 Item5;
public T6 Item6;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5,
T6 item6);
}
public struct ValueTuple<T1, T2, T3, T4, T5, T6, T7>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public T5 Item5;
public T6 Item6;
public T7 Item7;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5,
T6 item6, T7 item7);
}
public struct ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>
{
public T1 Item1;
public T2 Item2;
public T3 Item3;
public T4 Item4;
public T5 Item5;
public T6 Item6;
public T7 Item7;
public TRest Rest;
public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5,
T6 item6, T7 item7, TRest rest);
}
}
namespace System.Collections.Generic
{
public interface IReadOnlyCollection<out T> : IEnumerable<T>
{
int Count { get; }
}
public interface IReadOnlyList<out T> : IReadOnlyCollection<T>
{
T this [int index] { get; }
}
}
namespace System.Diagnostics.CodeAnalysis
{
[System.AttributeUsage(System.AttributeTargets.Field |
System.AttributeTargets.Parameter | System.AttributeTargets.Property,
Inherited=false)]
public sealed class AllowNullAttribute : Attribute
{
public AllowNullAttribute() { }
}
[System.AttributeUsage(System.AttributeTargets.Field |
System.AttributeTargets.Parameter | System.AttributeTargets.Property,
Inherited=false)]
public sealed class DisallowNullAttribute : Attribute
{
public DisallowNullAttribute() {}
}
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class DoesNotReturnAttribute : Attribute
{
public DoesNotReturnAttribute() {}
}
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class DoesNotReturnIfAttribute : Attribute
{
public DoesNotReturnIfAttribute(bool parameterValue) {}
}
[System.AttributeUsage(System.AttributeTargets.Field |
System.AttributeTargets.Parameter | System.AttributeTargets.Property |
System.AttributeTargets.ReturnValue, Inherited=false)]
public sealed class MaybeNullAttribute : Attribute
{
public MaybeNullAttribute() {}
}
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class MaybeNullWhenAttribute : Attribute
{
public MaybeNullWhenAttribute(bool returnValue) {}
}
[System.AttributeUsage(System.AttributeTargets.Field |
System.AttributeTargets.Parameter | System.AttributeTargets.Property |
System.AttributeTargets.ReturnValue, Inherited=false)]
public sealed class NotNullAttribute : Attribute
{
public NotNullAttribute() {}
}
[System.AttributeUsage(System.AttributeTargets.Parameter |
System.AttributeTargets.Property | System.AttributeTargets.ReturnValue,
AllowMultiple=true, Inherited=false)]
public sealed class NotNullIfNotNullAttribute : Attribute
{
public NotNullIfNotNullAttribute(string parameterName) {}
}
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class NotNullWhenAttribute : Attribute
{
public NotNullWhenAttribute(bool returnValue) {}
}
}
namespace System.Collections.Generic
{
public interface IAsyncEnumerable<out T>
{
IAsyncEnumerator<T> GetAsyncEnumerator();
}
public interface IAsyncEnumerator<out T> : IAsyncDisposable
{
ValueTask<bool> MoveNextAsync();
T Current { get; }
}
}
namespace System.Linq.Expressions
{
public sealed class Expression<TDelegate>
{
public TDelegate Compile();
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Interface,
Inherited = false, AllowMultiple = false)]
public sealed class AsyncMethodBuilderAttribute : Attribute
{
public AsyncMethodBuilderAttribute(Type builderType) {}
public Type BuilderType { get; }
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerFilePathAttribute : Attribute
{
public CallerFilePathAttribute() { }
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerLineNumberAttribute : Attribute
{
public CallerLineNumberAttribute() { }
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerMemberNameAttribute : Attribute
{
public CallerMemberNameAttribute() { }
}
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class EnumeratorCancellationAttribute : Attribute
{
public EnumeratorCancellationAttribute() {}
}
public static class FormattableStringFactory
{
public static FormattableString Create(string format,
params object?[] arguments);
}
public interface ICriticalNotifyCompletion : INotifyCompletion
{
void UnsafeOnCompleted(Action continuation);
}
public interface INotifyCompletion
{
void OnCompleted(Action continuation);
}
public readonly struct TaskAwaiter : ICriticalNotifyCompletion,
INotifyCompletion
{
public bool IsCompleted { get; }
public void GetResult();
}
public readonly struct TaskAwaiter<TResult> : ICriticalNotifyCompletion,
INotifyCompletion
{
public bool IsCompleted { get; }
public TResult GetResult();
}
public readonly struct ValueTaskAwaiter : ICriticalNotifyCompletion,
INotifyCompletion
{
public bool IsCompleted { get; }
public void GetResult();
}
public readonly struct ValueTaskAwaiter<TResult>
: ICriticalNotifyCompletion, INotifyCompletion
{
public bool IsCompleted { get; }
public TResult GetResult();
}
}
namespace System.Threading.Tasks
{
public class Task
{
public System.Runtime.CompilerServices.TaskAwaiter GetAwaiter();
}
public class Task<TResult> : Task
{
public new System.Runtime.CompilerServices.TaskAwaiter<T> GetAwaiter();
}
public readonly struct ValueTask : System.IEquatable<ValueTask>
{
public System.Runtime.CompilerServices.ValueTaskAwaiter GetAwaiter();
}
public readonly struct ValueTask<TResult>
: System.IEquatable<ValueTask<TResult>>
{
public new System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>
GetAwaiter();
}
public readonly struct CancellationToken : IEquatable<System.Threading.CancellationToken>
{
public static CancellationToken None { get; }
public bool IsCancellationRequested { get; }
public bool CanBeCanceled { get; }
public WaitHandle WaitHandle { get; }
public CancellationToken(bool canceled);
public CancellationTokenRegistration Register(Action callback);
public CancellationTokenRegistration Register(Action callback, bool useSynchronizationContext);
public CancellationTokenRegistration Register(Action<object?> callback, object? state);
public CancellationTokenRegistration Register(Action<object?, CancellationToken> callback, object? state);
public CancellationTokenRegistration Register(Action<object?> callback, object? state, bool useSynchronizationContext);
public CancellationTokenRegistration UnsafeRegister(Action<object?> callback, object? state);
public CancellationTokenRegistration UnsafeRegister(Action<object?, CancellationToken> callback, object? state);
public bool Equals(CancellationToken other);
public override bool Equals([NotNullWhen(true)] object? other);
public override int GetHashCode();
public static bool operator ==(CancellationToken left, CancellationToken right);
public static bool operator !=(CancellationToken left, CancellationToken right);
public void ThrowIfCancellationRequested();
}
}
C.4 Formátumspecifikációk
Az interpolált sztringkifejezésekben (§12.8.3) használt formátumok jelentését az ISO/IEC 23271:2012 szabvány határozza meg. A kényelem érdekében a program a következő szöveget másolja ki a leírásból System.IFormattable
.
Ez a szöveg informatív.
A formátumok olyan sztringek, amelyek egy objektum megjelenését írják le, amikor sztringgé alakítják. Szabványos vagy egyéni formátumok is használhatók. A standard formátum az Axx formátum, ahol az A egy betűrendes karakter, a formátumkijelölő, az xx pedig egy nulla és 99 közötti egész szám, amelyet pontosság-meghatározónak neveznek. A formátumkijelölő szabályozza a sztringként ábrázolt értékre alkalmazott formázás típusát. A pontosság-meghatározó a sztringben lévő jelentős számjegyek vagy tizedesjegyek számát vezérli, ha van ilyen.
Megjegyzés: A szabványos formátumkijelölők listájáért tekintse meg az alábbi táblázatot. Vegye figyelembe, hogy előfordulhat, hogy egy adott adattípus, például
System.Int32
egy vagy több szabványos formátumkijelölő nem támogatott. végjegyzet
Megjegyzés: Ha egy formátum kultúránként eltérő szimbólumokat tartalmaz, például a "C" és a "c" formátum által tartalmazott pénznemszimbólumot, a formázási objektum a sztring-ábrázolásban használt tényleges karaktereket adja meg. A metódus tartalmazhat egy paramétert egy formázási objektumot biztosító objektum átadásához
System.IFormatProvider
, vagy a metódus az alapértelmezett formázási objektumot használhatja, amely az aktuális kultúra szimbólumdefinícióit tartalmazza. A jelenlegi kultúra általában ugyanazt a szimbólumkészletet használja, amelyet alapértelmezés szerint rendszerszintűen használnak. Az alaposztálytárban a rendszer által megadott numerikus típusok formázási objektuma egySystem.Globalization.NumberFormatInfo
példány. PéldáulSystem.DateTime
a használt példányokSystem.Globalization.DateTimeFormatInfo
. végjegyzet
Az alábbi táblázat az alaposztálytár numerikus adattípusaival használt szabványos formátumkijelölőket és társított formázási objektumtagokat ismerteti.
Format Specifier | Leírás |
---|---|
|
Pénznemformátum: Pénzügyi értéket tartalmazó sztringekhez használatos. A
Ha a pontosság-meghatározó nincs megadva, |
|
Decimális formátum: (Ez a formátum csak akkor érvényes, ha az integrál adattípusokkal van megadva.) Egész számértékeket tartalmazó sztringekhez használatos. A negatív számok előtagja a tulajdonság által A pontosság-meghatározó határozza meg a sztringben megjelenő számjegyek minimális számát. Ha a megadott pontossághoz több számjegyre van szükség, mint amennyit az érték tartalmaz, a sztring bal oldali kitöltése nullákkal történik. Ha a pontosság-meghatározó kevesebb számjegyet ad meg, mint amennyi az értékben van, a pontosság-meghatározó figyelmen kívül lesz hagyva. |
|
Tudományos (mérnöki) formátum: Sztringekhez használatos az alábbi űrlapok egyikében: [-]m.dddddddDE+xxx [-]m.ddddddE-xxx [-]m.ddddddd e+xxx [-]m.dddddde-xxx A negatív szám szimbólum ('-') csak akkor jelenik meg, ha az érték negatív, és a Pontosan egy nem nulla tizedesjegy (m) előzi meg a tulajdonság által A pontosság-meghatározó határozza meg a karakterlánc tizedesjegyeinek (dddddd) számát. Ha a pontosság-meghatározó nincs megadva, a sztring hat tizedesjegyet tartalmaz. A kitevő (+/-xxx) egy pozitív vagy negatív számszimbólumból áll, amelyet legalább három számjegy (xxx) követ. A kitevőt szükség esetén nullákkal kell kipárnázni. A formátumjelölő ('E' vagy 'e' ) esete határozza meg a sztringben a kitevő előtaghoz (E vagy e) használt esetet. Az eredmények szükség esetén a legközelebbi ábrázolható értékre vannak kerekítve. A pozitív szám szimbólumot a |
|
Rögzített pontformátum: A következő formában használt sztringekhez használható: [-]m.dd... d Legalább egy nem nulla tizedesjegy (m) megelőzi a tulajdonság által A negatív számszimbólumjel ('-') csak akkor előzi meg az m értéket, ha az érték negatív. Ezt a szimbólumot a A pontosság-meghatározó határozza meg a tizedesjegyek számát (dd... d) a sztringben. Ha a pontosság-meghatározó nincs megadva, |
|
Általános formátum: A sztring rögzített pontformátumban ("F" vagy "f") vagy tudományos formátumban ("E" vagy "e") van formázva. Integráltípusok esetén: Az értékek rögzítettpontos formátummal vannak formázva, ha a kitevő< pontossági meghatározó, ahol a kitevő a tudományos formátumú érték kitevője . Minden más értékhez tudományos formátumot használunk. Ha a pontosság-kijelölő nincs megadva, akkor a program az adattípus maximális értékének megjelenítéséhez szükséges mezőszélességnek megfelelő alapértelmezett pontosságot használja, ami azt eredményezi, hogy az érték rögzítettpontos formátumban van formázva. Az integráltípusok alapértelmezett pontossága a következő:
Egy-, tizedes- és kettős típusok esetén: Az értékek rögzítettpontos formátummal vannak formázva, ha a kitevő ≥ -4 és a kitevő< pontossági kijelölő, ahol a kitevő az érték kitevője tudományos formátumban. Minden más értékhez tudományos formátumot használunk. Az eredmények szükség esetén a legközelebbi ábrázolható értékre vannak kerekítve. Ha a pontosság-meghatározó nincs megadva, a rendszer a következő alapértelmezett pontosságokat használja:
Minden típushoz:
|
|
Számformátum: A következő űrlap sztringjeihez használatos: [-]d,ddd,ddd.dd... d A negatív értékek ábrázolását a Legalább egy nem nulla tizedesjegy (d) megelőzi a tulajdonság által A pontosság-meghatározó határozza meg a tizedesjegyek számát (dd... d). Ha a pontosság-meghatározó nincs megadva, |
|
Százalékformátum: Százalékot tartalmazó sztringekhez használatos. A
Ha nincs megadva pontosság, az eredményben szereplő tizedesjegyek számát a függvény határozza meg Az eredmény 100-ra van skálázva (.99-ből 99%). |
|
Körút formátuma: (Ez a formátum csak akkor érvényes, ha meg van adva vagy System.Double System.Single .) Annak biztosítására szolgál, hogy a lebegőpontos értékek sztringreprezentációjának pontossága olyan legyen, hogy a sztring elemzése ne eredményezzen pontosságvesztést az eredeti értékhez képest. Ha az adattípus (7 System.Single és 15 System.Double ) maximális pontossága a pontosság csökkenését eredményezné, a pontosság két tizedesjegygel nő. Ha egy pontosság-meghatározót ad meg ezzel a formátumkijelölővel, a rendszer figyelmen kívül hagyja. Ez a formátum egyébként megegyezik a rögzített pont formátumával. |
|
Hexadecimális formátum: (Ez a formátum csak akkor érvényes, ha az integrál adattípusokkal van megadva.) Számokat ábrázoló sztringek a 16-os alapban. A pontosság határozza meg a sztringben lévő számjegyek minimális számát. Ha a pontosság több számjegyet ad meg, mint amennyit a szám tartalmaz, a szám bal oldali kitöltése nullákkal történik. A formátumjelölő ("X" vagy "x") esete határozza meg, hogy nagybetűket vagy kisbetűket használnak-e a hexadecimális ábrázolásban. |
Ha a numerikus érték egy vagy egy , vagy, akkor a formátumjelölő figyelmen kívül lesz hagyva, és a következő értékek egyikét adja vissza: System.Single
, System.Double
vagy NaN
.PositiveInfinity
NegativeInfinity
System.Globalization.NumberFormatInfo.NaNSymbol
System.Globalization.NumberFormatInfo.PositiveInfinitySymbol
System.Globalization.NumberFormatInfo.NegativeInfinitySymbol
Az egyéni formátum minden olyan sztring, amely formátumként van megadva, és nem a fent leírt standard formátumú sztring (Axx) formájában van megadva. Az alábbi táblázat az egyéni formátumok készítéséhez használt karaktereket ismerteti.
Format Specifier | Leírás |
---|---|
0 (nulla) |
Nulla helyőrző: Ha a formázott értéknek van egy számjegye abban a pozícióban, ahol a "0" egyéni formátumban jelenik meg, akkor a program ezt a számjegyet a kimeneti sztringbe másolja, ellenkező esetben a kimeneti sztringben egy nulla van tárolva ebben a pozícióban. A bal szélső "0" pozíciója a tizedeselválasztó előtt, a jobb szélső "0" pedig a tizedeselválasztó után határozza meg a kimeneti sztringben mindig jelen lévő számjegyek tartományát. A tizedesjelet követő nulla és/vagy számjegy helyőrzők száma határozza meg a tizedeselválasztó után megjelenő számjegyek számát. Az értékek szükség szerint kerekítve lesznek. |
# |
Számjegy helyőrzője: Ha a formázott értéknek van egy számjegye abban a pozícióban, ahol az egyéni formátumban egy "#" jelenik meg, akkor a program ezt a számjegyet a kimeneti sztringbe másolja; ellenkező esetben a kimeneti sztringben semmi sem található ebben a pozícióban. Vegye figyelembe, hogy ez a kijelölő soha nem tárolja a "0" karaktert, ha nem jelentős számjegy, még akkor sem, ha a sztringben a "0" az egyetlen számjegy. (A kimeneti sztringben a "0" karakter jelenik meg, ha jelentős számjegy.) A tizedesjelet követő nulla és/vagy számjegy helyőrzők száma határozza meg a tizedeselválasztó után megjelenő számjegyek számát. Az értékek szükség szerint kerekítve lesznek. |
. (időszak) |
Decimális elválasztó: A bal legtöbb "."
a formátumsztring karaktere határozza meg a decimális elválasztó helyét a formázott értékben; bármilyen további "." karakterek figyelmen kívül hagyása. A System.Globalization.NumberFormatInfo.NumberDecimalSeparator tulajdonság határozza meg a tizedesjelként használt szimbólumot. |
, (vessző) |
Csoportelválasztó és számskálázás: A "," karakter két célt szolgál. Először is, ha az egyéni formátum két Nulla vagy Számjegy helyőrző (0 vagy #) és a tizedeselválasztótól balra található karakter között tartalmazza ezt a karaktert, akkor a kimenetben a tizedeselválasztótól balra lévő számjegycsoportok között csoportelválasztók lesznek beszúrva.
Ha a formátumsztring egy vagy több "," karaktert tartalmaz közvetlenül a tizedeselválasztótól balra, akkor a szám skálázva lesz. A skálázási tényezőt a tizedesjel elválasztójelétől közvetlenül balra lévő csoportelválasztó karakterek száma határozza meg. Ha vannak x karakterek, akkor az érték 1000X-tal lesz osztva a formázás előtt. A "0" formátumsztring például egymillióval osztja el az értéket. Vegye figyelembe, hogy a skálázást jelző "," karakter jelenléte nem szúr be csoportelválasztókat a kimeneti sztringbe. Így egy szám 1 millióval való skálázásához és csoportelválasztók beszúrásához használjon a "#,##0," formátumhoz hasonló egyéni formátumot. |
% (százalék) |
Százalékos helyőrző: A(z) "%" karakter jelenléte egyéni formátumban azt eredményezi, hogy a szám megszorozva lesz 100-mal a formázás előtt. A százalék szimbólum be lesz szúrva a kimeneti sztringbe azon a helyen, ahol a (%) megjelenik a formátumsztringben. A System.Globalization.NumberFormatInfo.PercentSymbol tulajdonság határozza meg a százalékszimbólumot. |
|
Mérnöki formátum: Ha az "E", "E+", "E-", "e", "e+" vagy "e-" sztringek bármelyike egyéni formátumban van jelen, és legalább egy "0" karakter követi, akkor az érték tudományos jelöléssel van formázva. A kitevő előtagot (E vagy e) követő "0" karakterszám határozza meg a kitevőben lévő számjegyek minimális számát. Az "E+" és az "e+" formátum azt jelzi, hogy a pozitív vagy negatív számszimbólum mindig megelőzi a kitevőt. Az "E", "E-", "e" vagy "e-" formátum azt jelzi, hogy a negatív számszimbólum megelőzi a negatív kitevőket; egyetlen szimbólum sem előzi meg a pozitív kitevőket. A pozitív szám szimbólumot a System.Globalization.NumberFormatInfo.PositiveSign tulajdonság adja meg. A negatív számszimbólumot a System.Globalization.NumberFormatInfo.NegativeSign tulajdonság adja meg. |
\ (fordított perjel) |
Escape karakter: Egyes nyelvekben(például C#) a fordított perjel karakter az egyéni formátumban lévő következő karaktert feloldósorozatként értelmezi. C nyelvformázási szekvenciákhoz, például "\n" (newline) használják. Bizonyos nyelvekben magát a feloldó karaktert elő kell előznie egy feloldó karakternek, ha konstansként használják. Ellenkező esetben a fordító feloldósorozatként értelmezi a karaktert. Ezt a feloldó karaktert nem kell minden programozási nyelven támogatni. |
|
Literális sztring: Az egy- vagy dupla idézőjelek közé zárt karaktereket a program szó szerint átmásolja a kimeneti sztringbe, és nem befolyásolja a formázást. |
; (pontosvessző) |
Szakaszelválasztó: A ";" karakter a pozitív, negatív és nulla számokat tartalmazó szakaszok elválasztására szolgál a formátumsztringben. (Ezt a funkciót az alábbiakban részletesen ismertetjük.) |
Egyéb | Minden más karakter: A kimeneti sztringben minden más karaktert a rendszer literálként tárol abban a pozícióban, amelyben azok megjelennek. |
Vegye figyelembe, hogy rögzítettpontos formátumú sztringek (az "E0", "E+0", "E-0", "e0", "e+0" vagy "e-0" sztringeket nem tartalmazó sztringek) esetében a számok annyi tizedesjegyre vannak kerekítve, mint a tizedeselválasztótól jobbra található Nulla vagy Számjegy helyőrzők. Ha az egyéni formátum nem tartalmaz decimális elválasztójelet, a szám a legközelebbi egész számra lesz kerekítve. Ha a számnak több számjegye van, mint a tizedeselválasztótól balra található Nulla vagy Számjegy helyőrzők, a további számjegyeket a program közvetlenül az első Nulla vagy Számjegy helyőrző előtt másolja a kimeneti sztringbe.
Az egyéni formátum legfeljebb három szakaszt tartalmazhat szakaszelválasztó karakterekkel elválasztva, így különböző formázást adhat meg a pozitív, negatív és nulla értékekhez. A szakaszok értelmezése a következő:
Egy szakasz: Az egyéni formátum minden értékre vonatkozik (pozitív, negatív és nulla). A negatív értékek negatív előjelet tartalmaznak.
Két szakasz: Az első szakasz pozitív értékekre és nullákra, a második pedig a negatív értékekre vonatkozik. Ha a formázandó érték negatív, de a második szakasz formátuma szerinti kerekítés után nullává válik, akkor az eredményül kapott nulla az első szakasz szerint lesz formázva. A negatív értékek nem tartalmaznak negatív előjelet, így teljes mértékben szabályozható a negatív értékek ábrázolása. A negatívok például zárójelben is megjeleníthetők a "####.#; formátumhoz hasonló egyéni formátummal; (####.####)’.
Három szakasz: Az első szakasz a pozitív értékekre, a második a negatív értékekre, a harmadik pedig a nullákra vonatkozik. A második szakasz lehet üres (a pontosvesszők között semmi sem jelenik meg), ebben az esetben az első szakasz az összes nemzero értékre vonatkozik, a negatív értékek pedig negatív előjelet tartalmaznak. Ha a formázandó szám nem nulla, de az első vagy a második szakasz formátuma szerinti kerekítés után nullává válik, akkor az eredményül kapott nulla a harmadik szakasz szerint lesz formázva.
A System.Enum
típusok formátumkijelölőkkel System.DateTime
is támogatják az értékek sztringreprezentációinak formázását. Egy adott formátumjelölő jelentése a formázandó adatok típusától (numerikus, dátum/idő, enumerálás) függően változik. Tekintse meg és System.Enum
tekintse meg System.Globalization.DateTimeFormatInfo
az egyes típusok által támogatott formátumjelölők átfogó listáját.
C.5 kódtártípus rövidítései
Ebben a specifikációban az alábbi kódtártípusokra hivatkozunk. Az alábbiakban felsoroljuk az ilyen típusok teljes nevét, beleértve a globális névtér-minősítőt is. Ebben a specifikációban ezek a típusok teljes névként jelennek meg; a globális névtér-minősítő ki van hagyva; vagy egy egyszerű, nem minősített típusnévként, a névtér kihagyása mellett. Például a típus ICollection<T>
, ha ebben a specifikációban használatos, mindig a típust global::System.Collections.Generic.ICollection<T>
jelenti.
global::System.Action
global::System.ArgumentException
global::System.ArithmeticException
global::System.Array
global::System.ArrayTypeMisMatchException
global::System.Attribute
global::System.AttributeTargets
global::System.AttributeUsageAttribute
global::System.Boolean
global::System.Byte
global::System.Char
global::System.Decimal
global::System.Delegate
global::System.DivideByZeroException
global::System.Double
global::System.Enum
global::System.Exception
global::System.FormattableString
global::System.GC
global::System.IAsyncDisposable
global::System.IDisposable
global::System.IFormattable
global::System.IndexOutOfRangeException
global::System.Int16
global::System.Int32
global::System.Int64
global::System.IntPtr
global::System.InvalidCastException
global::System.InvalidOperationException
global::System.NotSupportedException
global::System.Nullable<T>
global::System.NullReferenceException
global::System.Object
global::System.ObsoleteAttribute
global::System.OperationCanceledException
global::System.OutOfMemoryException
global::System.OverflowException
global::System.ReadOnlySpan
global::System.SByte
global::System.Single
global::System.Span
global::System.StackOverflowException
global::System.String
global::System.SystemException
global::System.Type
global::System.TypeInitializationException
global::System.UInt16
global::System.UInt32
global::System.UInt64
global::System.UIntPtr
global::System.ValueTuple<T1>
global::System.ValueTuple<T1, T2>
global::System.ValueTuple<T1, T2, T3>
global::System.ValueTuple<T1, T2, T3, T4>
global::System.ValueTuple<T1, T2, T3, T4, T5>
global::System.ValueTuple<T1, T2, T3, T4, T5, T6>
global::System.ValueTuple<T1, T2, T3, T4, T5, T6, T7>
global::System.ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>
global::System.ValueType
global::System.Collections.ICollection
global::System.Collections.IEnumerable
global::System.Collections.IEnumerator
global::System.Collections.IList
global::System.Collections.Generic.IAsyncEnumerable<out T>
global::System.Collections.Generic.IAsyncEnumerator<out T>
global::System.Collections.Generic.ICollection<T>
global::System.Collections.Generic.IEnumerable<T>
global::System.Collections.Generic.IEnumerator<T>
global::System.Collections.Generic.IList<T>
global::System.Collections.Generic.IReadonlyCollection<out T>
global::System.Collections.Generic.IReadOnlyList<out T>
global::System.Diagnostics.ConditionalAttribute
global::System.Diagnostics.CodeAnalysis.AllowNullAttribute
global::System.Diagnostics.CodeAnalysis.DisallowNullAttribute
global::System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute
global::System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute
global::System.Diagnostics.CodeAnalysis.MaybeNullAttribute
global::System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute
global::System.Diagnostics.CodeAnalysis.NotNullAttribute
global::System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute
global::System.Diagnostics.CodeAnalysis.NotNullWhenAttribute
global::System.Linq.Expressions.Expression<TDelegate>
global::System.Reflection.MemberInfo
global::System.Runtime.CompilerServices.AsyncMethodBuilderAttribute
global::System.Runtime.CompilerServices.CallerFileAttribute
global::System.Runtime.CompilerServices.CallerLineNumberAttribute
global::System.Runtime.CompilerServices.CallerMemberNameAttribute
global::System.Runtime.CompilerServices.FormattableStringFactory
global::System.Runtime.CompilerServices.ICriticalNotifyCompletion
global::System.Runtime.CompilerServices.IndexerNameAttribute
global::System.Runtime.CompilerServices.INotifyCompletion
global::System.Runtime.CompilerServices.TaskAwaiter
global::System.Runtime.CompilerServices.TaskAwaiter<T>
global::System.Runtime.CompilerServices.ValueTaskAwaiter
global::System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>
global::System.Runtime.CompilerServices.Unsafe
global::System.Threading.Monitor
global::System.Threading.Tasks.Task
global::System.Threading.Tasks.Task<TResult>
Az informatív szöveg vége.
ECMA C# draft specification