다음을 통해 공유


부록 C 표준 라이브러리

C.1 일반

준수 C# 구현은 특정 의미 체계를 갖는 최소 형식 집합을 제공해야 합니다. 이러한 형식 및 해당 멤버는 네임스페이스 및 형식별로 사전순으로 나열됩니다. 이러한 형식 및 해당 멤버에 대한 공식적인 정의는 ISO/IEC 23271:2012 CLI(공용 언어 인프라), 파티션 IV; 이 사양에서 참조로 포함되는 BCL(기본 클래스 라이브러리), 확장 숫자 라이브러리 및 확장 배열 라이브러리입니다.

이 텍스트는 유익합니다.

표준 라이브러리는 준수 C# 구현에 필요한 형식 및 멤버의 최소 집합이 됩니다. 따라서 C# 언어 사양에 명시적으로 필요한 멤버만 포함됩니다.

규정 준수 C# 구현은 유용한 프로그램을 작성할 수 있는 훨씬 더 광범위한 라이브러리를 제공할 것으로 예상됩니다. 예를 들어, 준수 구현은 다음을 통해 이 라이브러리를 확장할 수 있습니다.

  • 네임스페이스 추가
  • 형식을 추가합니다.
  • 비 인터페이스 형식에 멤버 추가
  • 중간 기본 클래스 또는 인터페이스를 추가합니다.
  • 구조체 및 클래스 형식이 있으면 추가 인터페이스를 구현합니다.
  • 기존 형식 및 멤버에 ConditionalAttribute특성(이외)을 추가합니다.

정보 텍스트의 끝입니다.

ISO/IEC 23271에 정의된 C.2 표준 라이브러리 형식

참고: 아래의 일부 struct 형식에는 readonly 한정자가 있습니다. ISO/IEC 23271이 릴리스되었을 때 이 한정자를 사용할 수 없지만 이 사양의 구현을 준수하는 데 필요합니다. 끝 메모

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 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);
    }
}

C.3 ISO/IEC 23271에 정의되지 않은 표준 라이브러리 형식

나열된 멤버를 포함한 다음 형식은 준수 표준 라이브러리에 정의되어야 합니다. (이러한 형식은 이후 버전의 ISO/IEC 23271에서 정의될 수 있습니다.) 이러한 유형의 대부분은 나열된 것보다 더 많은 멤버를 사용할 수 있을 것으로 예상됩니다.

준수 구현은 확장 메서드로 제공할 Task.GetAwaiter() Task<TResult>.GetAwaiter() 수 있습니다.

namespace System
{
    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.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() { }
    }

    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();
    }

    [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.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();
    }
}

C.4 형식 사양

보간된 문자열 식(§12.8.3)에 사용되는 형식의 의미는 ISO/IEC 23271:2012에 정의됩니다. 편의를 위해 다음 텍스트는 에 대한 설명 System.IFormattable에서 복사됩니다.

이 텍스트는 유익합니다.

형식은 문자열로 변환할 때 개체의 모양을 설명하는 문자열입니다. 표준 또는 사용자 지정 형식을 사용할 수 있습니다. 표준 형식은 Axx 형식을 사용합니다. 여기서 A는 형식 지정자라는 단일 알파벳 문자이고 xx는 전체 자릿수 지정자라고 하는 0에서 99 사이의 정수입니다. 형식 지정자는 문자열로 표시되는 값에 적용되는 서식의 형식을 제어합니다. 정밀도 지정자는 해당하는 경우 문자열의 유효 자릿수 또는 소수 자릿수를 제어합니다.

참고: 표준 형식 지정자 목록은 아래 표를 참조하세요. 지정된 데이터 형식(예: System.Int32)은 하나 이상의 표준 형식 지정자를 지원하지 않을 수 있습니다. 끝 메모

참고: 형식에 'C' 및 'c' 형식에 포함된 currencysymbol과 같이 문화권에 따라 달라지는 기호가 포함된 경우 서식 개체는 문자열 표현에 사용되는 실제 문자를 제공합니다. 메서드는 서식 지정 개체를 제공하는 개체를 전달하는 System.IFormatProvider 매개 변수를 포함하거나 메서드가 현재 문화권에 대한 기호 정의를 포함하는 기본 서식 지정 개체를 사용할 수 있습니다. 현재 문화권은 일반적으로 기본적으로 시스템 전체에서 사용되는 동일한 기호 집합을 사용합니다. 기본 클래스 라이브러리에서 시스템 제공 숫자 형식의 서식 지정 개체는 인스턴스입니다 System.Globalization.NumberFormatInfo . 예를 System.DateTime 들어 a System.Globalization.DateTimeFormatInfo 가 사용됩니다. 끝 메모

다음 표에서는 기본 클래스 라이브러리의 숫자 데이터 형식과 함께 사용되는 표준 형식 지정자 및 연결된 서식 지정 개체 멤버에 대해 설명합니다.

형식 지정자 설명

C

c

통화 형식: 통화 값을 포함하는 문자열에 사용됩니다. System.Globalization.NumberFormatInfo.CurrencySymbol숫자 그룹화 및 System.Globalization.NumberFormatInfo.CurrencyDecimalSeparator 소수 구분 기호에 System.Globalization.NumberFormatInfo 대한 통화 기호, 크기 및 구분 기호를 각각 제공하는 , System.Globalization.NumberFormatInfo.CurrencyGroupSizesSystem.Globalization.NumberFormatInfo.CurrencyGroupSeparator및 멤버입니다.

System.Globalization.NumberFormatInfo.CurrencyNegativePattern 음수 및 System.Globalization.NumberFormatInfo.CurrencyPositivePattern 양수 값을 나타내는 데 사용되는 기호를 결정합니다. 예를 들어 음수 값은 빼기 기호로 접두사를 지정하거나 괄호로 묶을 수 있습니다.

전체 자릿수 지정자를 생략 System.Globalization.NumberFormatInfo.CurrencyDecimalDigits 하면 문자열의 소수 자릿수를 결정합니다. 필요한 경우 결과가 가장 가까운 표현 가능한 값으로 반올림됩니다.

D

d

10진수 형식: (이 형식은 정수 데이터 형식으로 지정된 경우에만 유효합니다.) 정수 값을 포함하는 문자열에 사용됩니다. 음수는 속성에 지정된 음수 기호 접두사로 지정 System.Globalization.NumberFormatInfo.NegativeSign 됩니다.

전체 자릿수 지정자는 문자열에 표시되는 최소 자릿수를 결정합니다. 지정된 전체 자릿수에 값이 포함된 것보다 더 많은 자릿수가 필요한 경우 문자열은 왼쪽에 0으로 채워집니다. 전체 자릿수 지정자가 값보다 적은 숫자를 지정하면 전체 자릿수 지정자는 무시됩니다.

E

e

공학(공학) 형식: 다음 형식 중 하나의 문자열에 사용됩니다.

          [-]m.ddddddE+xxx

          [-]m.ddddddE-xxx

          [-]m.dddddde+xxx

          [-]m.dddddde-xxx

음수 기호('-')는 값이 음수이고 속성에서 System.Globalization.NumberFormatInfo.NegativeSign 제공하는 경우에만 나타납니다.

정확히 0이 아닌 소수 자릿수(m)는 속성에서 제공하는 소수 구분 기호('.') 앞에 10 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 진수입니다.

전체 자릿수 지정자는 문자열의 소수 자릿수(dddddd)를 결정합니다. 전체 자릿수 지정자를 생략하면 6개의 소수 자릿수가 문자열에 포함됩니다.

지수(+/-xxx)는 양수 또는 음수 기호와 최소 3자리 숫자(xxx)로 구성됩니다. 필요한 경우 지수는 왼쪽에 0으로 채워집니다. 형식 지정자('E' 또는 'e')의 대/소문자는 문자열의 지수 접두사(E 또는 e)에 사용되는 대/소문자를 결정합니다. 필요한 경우 결과가 가장 가까운 표현 가능한 값으로 반올림됩니다. 양수 기호는 속성에 System.Globalization.NumberFormatInfo.PositiveSign 의해 제공됩니다.

F

f

고정 소수점 형식: 다음 형식의 문자열에 사용됩니다.

          [-]m.dd... d

속성에서 제공하는 소수 구분 기호('.') 앞에 0이 아닌 소수 자릿수(m)가 하나 이상 앞에 섰 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 습니다.

음수 기호 기호('-')는 값이 음수인 경우에만 m 앞에 옵니다. 이 기호는 속성에서 System.Globalization.NumberFormatInfo.NegativeSign 제공합니다.

전체 자릿수 지정자는 소수 자릿수를 결정합니다(dd... d) 문자열에 있습니다. 전체 자릿수 지정자를 생략 System.Globalization.NumberFormatInfo.NumberDecimalDigits 하면 문자열의 소수 자릿수를 결정합니다. 필요한 경우 결과가 가장 가까운 표현 가능한 값으로 반올림됩니다.

G

g

일반 형식: 문자열은 고정 소수점 형식('F' 또는 'f') 또는 과학적 형식('E' 또는 'e')으로 서식이 지정됩니다.

정수 계열 형식의 경우:

지수< 정밀도 지정자가 지수인 경우 값은 고정 소수점 형식을 사용하여 서식이 지정됩니다. 여기서 지수 는 과학적 형식의 값의 지수입니다. 다른 모든 값의 경우 과학적 형식이 사용됩니다.

전체 자릿수 지정자를 생략하면 데이터 형식의 최대값을 표시하는 데 필요한 필드 너비와 동일한 기본 전체 자릿수가 사용되므로 값이 고정 소수점 형식으로 서식이 지정됩니다. 정수 계열 형식의 기본 정밀도는 다음과 같습니다.

          System.Int16, System.UInt16 : 5

          System.Int32, System.UInt32 : 10

          System.Int64, System.UInt64 : 19

Single, Decimal 및 Double 형식의 경우:

지수 ≥ -4이고< 지수 정밀도 지정자가 있는 경우 값은 고정 소수점 형식을 사용하여 서식이 지정됩니다. 여기서 지수는 과학적 형식의 값의 지수입니다. 다른 모든 값의 경우 과학적 형식이 사용됩니다. 필요한 경우 결과가 가장 가까운 표현 가능한 값으로 반올림됩니다.

전체 자릿수 지정자를 생략하면 다음과 같은 기본 정밀도가 사용됩니다.

          System.Single : 7

          System.Double : 15

          System.Decimal : 29

모든 형식의 경우:

  • 결과에 나타나는 자릿수(지수 포함 안 함)는 전체 자릿수 지정자의 값을 초과하지 않습니다. 값은 필요에 따라 반올림됩니다.
  • 10진수 점과 소수점 이후의 후행 0은 가능하면 제거됩니다.
  • 형식 지정자('G' 또는 'g')의 경우 'E' 또는 'e'가 과학적 형식 지수의 접두사를 지정하는지 여부를 결정합니다.

N

n

숫자 형식: 다음 형식의 문자열에 사용됩니다.

          [-]d,ddd,ddd.dd... d

음수 값의 표현은 속성에 의해 결정됩니다 System.Globalization.NumberFormatInfo.NumberNegativePattern . 패턴에 음수 기호('-')가 포함된 경우 이 기호는 속성에서 System.Globalization.NumberFormatInfo.NegativeSign 제공됩니다.

속성에서 제공하는 소수 구분 기호('.') 앞에 0이 아닌 소수 자릿수(d)가 하나 이상 앞에 섰 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 습니다. 소수점과 값에서 가장 중요한 숫자 사이의 숫자는 속성에 지정된 그룹 크기를 사용하여 그룹화됩니다 System.Globalization.NumberFormatInfo.NumberGroupSizes . 그룹 구분 기호(',')는 각 숫자 그룹 사이에 삽입되고 속성에서 System.Globalization.NumberFormatInfo.NumberGroupSeparator 제공됩니다.

전체 자릿수 지정자는 소수 자릿수를 결정합니다(dd... d). 전체 자릿수 지정자를 생략 System.Globalization.NumberFormatInfo.NumberDecimalDigits 하면 문자열의 소수 자릿수를 결정합니다. 필요한 경우 결과가 가장 가까운 표현 가능한 값으로 반올림됩니다.

P

p

백분율 형식: 백분율을 포함하는 문자열에 사용됩니다. System.Globalization.NumberFormatInfo.PercentSymbol숫자 System.Globalization.NumberFormatInfo.PercentGroupSizesSystem.Globalization.NumberFormatInfo.PercentGroupSeparator그룹화 및 System.Globalization.NumberFormatInfo.PercentDecimalSeparator 소수 구분 기호에 System.Globalization.NumberFormatInfo 대한 백분율 기호, 크기 및 구분 기호를 각각 제공합니다.

System.Globalization.NumberFormatInfo.PercentNegativePattern 음수 및 System.Globalization.NumberFormatInfo.PercentPositivePattern 양수 값을 나타내는 데 사용되는 기호를 결정합니다. 예를 들어 음수 값은 빼기 기호로 접두사를 지정하거나 괄호로 묶을 수 있습니다.

정밀도를 지정하지 않으면 결과의 소수 자릿수는 .에 의해 System.Globalization.NumberFormatInfo.PercentDecimalDigits결정됩니다. 필요한 경우 결과가 가장 가까운 표현 가능한 값으로 반올림됩니다.

결과는 100씩 조정됩니다(.99는 99%).

R

r

왕복 형식: (이 형식은 지정 System.Double 한 경우 또는 System.Single.)에만 유효합니다. 부동 소수점 값의 문자열 표현 정밀도를 확인하는 데 사용됩니다. 따라서 문자열을 구문 분석해도 원래 값과 비교할 때 전체 자릿수가 손실되지 않습니다. 데이터 형식의 최대 전체 자릿수(7개 System.Single, 15 System.Double개)로 인해 전체 자릿수가 손실되는 경우 전체 자릿수는 10진수 2자리로 증가합니다. 전체 자릿수 지정자가 이 형식 지정자와 함께 제공되면 무시됩니다. 이 형식은 고정 소수점 형식과 동일하지 않습니다.

X

x

16진수 형식: (이 형식은 정수 데이터 형식으로 지정된 경우에만 유효합니다.) Base 16의 숫자 문자열 표현에 사용됩니다. 전체 자릿수는 문자열의 최소 자릿수를 결정합니다. 전체 자릿수가 숫자보다 더 많은 숫자를 지정하는 경우 숫자는 0으로 왼쪽 패딩됩니다. 형식 지정자('X' 또는 'x')의 경우 대문자 또는 소문자가 16진수 표현에서 사용되는지 여부를 결정합니다.

숫자 값이 a 또는 값이 , PositiveInfinity또는 NegativeInfinity형식 지정자가 무시되고 다음 중 하나가 반환System.Globalization.NumberFormatInfo.NaNSymbol되는 경우 , System.Globalization.NumberFormatInfo.PositiveInfinitySymbol또는 System.Globalization.NumberFormatInfo.NegativeInfinitySymbol.NaNSystem.Double System.Single

사용자 지정 형식은 위에서 설명한 표준 형식 문자열(Axx) 형식이 아닌 형식으로 지정된 문자열입니다. 다음 표에서는 사용자 지정 형식을 생성하는 데 사용되는 문자에 대해 설명합니다.

형식 지정자 설명
0 (0)

자리 표시자 0: 서식이 지정된 값에 사용자 지정 형식으로 '0'이 표시되는 위치에 숫자가 있는 경우 해당 숫자가 출력 문자열에 복사되고, 그렇지 않으면 출력 문자열의 해당 위치에 0이 저장됩니다. 소수 구분 기호 앞의 가장 왼쪽 '0'의 위치와 소수 구분 기호 뒤의 맨 오른쪽 '0'은 출력 문자열에 항상 존재하는 숫자 범위를 결정합니다.

소수 구분 기호 뒤의 0 및/또는 숫자 자리 표시자 수에 따라 소수 구분 기호 뒤의 숫자 수가 결정됩니다. 값은 필요에 따라 반올림됩니다.

#

숫자 자리 표시자: 서식이 지정된 값에 '#'이 사용자 지정 형식으로 표시되는 위치에 숫자가 있으면 해당 숫자가 출력 문자열에 복사되고, 그렇지 않으면 출력 문자열의 해당 위치에 아무 것도 저장되지 않습니다. 문자열에서 '0'이 유일한 숫자인 경우에도 이 지정자는 '0' 문자를 유효 자릿수가 아닌 경우 저장하지 않습니다. (유효 자릿수인 경우 출력 문자열에 '0' 문자가 표시됩니다.)

소수 구분 기호 뒤의 0 및/또는 숫자 자리 표시자 수에 따라 소수 구분 기호 뒤의 숫자 수가 결정됩니다. 값은 필요에 따라 반올림됩니다.

. (마침표) 소수 구분 기호: 가장 왼쪽 '.' 형식 문자열의 문자는 서식이 지정된 값에서 소수 구분 기호의 위치를 결정합니다. 추가 '.' 문자는 무시됩니다. 이 속성은 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 소수 구분 기호로 사용되는 기호를 결정합니다.
, (쉼표)

그룹 구분 기호 및 숫자 배율: ',' 문자는 두 가지 용도로 사용됩니다. 먼저 사용자 지정 형식에 0 또는 숫자 자리 표시자(0 또는 #) 사이에 이 문자가 포함되어 있고 소수 구분 기호가 있는 경우 출력에는 소수 구분 기호의 왼쪽에 있는 각 숫자 그룹 사이에 그룹 구분 기호가 삽입됩니다. 및 System.Globalization.NumberFormatInfo.NumberGroupSizes 속성은 System.Globalization.NumberFormatInfo.NumberGroupSeparator 각각 그룹 구분 기호로 사용되는 기호와 각 그룹의 숫자 수를 결정합니다.

서식 문자열에 소수 구분 기호 왼쪽에 하나 이상의 ',' 문자가 포함되어 있으면 숫자의 크기가 조정됩니다. 배율 인수는 소수 구분 기호의 왼쪽에 있는 그룹 구분 문자 수에 따라 결정됩니다. x 문자가 있는 경우 형식이 지정되기 전에 값이 1000X 로 나뉩니다. 예를 들어 형식 문자열 '0'은 값을 백만으로 나눕니다. 크기 조정을 나타내는 ',' 문자가 있으면 출력 문자열에 그룹 구분 기호가 삽입되지 않습니다. 따라서 숫자의 크기를 1백만으로 조정하고 그룹 구분 기호를 삽입하려면 '#,##0,'과 유사한 사용자 지정 형식을 사용합니다.

% (백분율) 백분율 자리 표시자: 사용자 지정 형식의 '%' 문자가 있으면 서식이 지정되기 전에 숫자를 100으로 곱합니다. 백분율 기호는 형식 문자열에 '%'가 표시되는 위치의 출력 문자열에 삽입됩니다. 이 속성은 System.Globalization.NumberFormatInfo.PercentSymbol 백분율 기호를 결정합니다.

E0

E+0

E-0

e0

e+0

e-0

엔지니어링 형식: 'E', 'E+', 'E-', 'e', 'e', 'e+' 또는 'e-' 문자열이 사용자 지정 형식으로 표시되고 그 뒤에 하나 이상의 '0' 문자가 바로 뒤에 오면 값이 과학적 표기법을 사용하여 형식이 지정됩니다. 지수 접두사(E 또는 e) 다음의 '0' 문자 수는 지수의 최소 자릿수를 결정합니다. 'E+' 및 'e+' 형식은 양수 또는 음수 기호가 항상 지수 앞에 있음을 나타냅니다. 'E', 'E-', 'e' 또는 'e-' 형식은 음수 기호가 음수 지수 앞에 있음을 나타냅니다. 기호가 양수 지수 앞에 있지 않습니다. 양수 기호는 속성에 System.Globalization.NumberFormatInfo.PositiveSign 의해 제공됩니다. 음수 기호는 속성에 System.Globalization.NumberFormatInfo.NegativeSign 의해 제공됩니다.
\ (백슬래시) 이스케이프 문자: C#과 같은 일부 언어에서는 백슬래시 문자로 인해 사용자 지정 형식의 다음 문자가 이스케이프 시퀀스로 해석됩니다. C 언어 서식 시퀀스(예: '\n'(줄)와 함께 사용됩니다. 일부 언어에서는 이스케이프 문자 자체가 리터럴로 사용될 때 이스케이프 문자 앞에 와야 합니다. 그렇지 않으면 컴파일러가 문자를 이스케이프 시퀀스로 해석합니다. 이 이스케이프 문자는 모든 프로그래밍 언어에서 지원되지 않아도 됩니다.

'ABC'

"ABC"

리터럴 문자열: 작은따옴표나 큰따옴표로 묶인 문자는 리터럴 방식으로 출력 문자열에 복사되며 서식에는 영향을 미치지 않습니다.
; (세미콜론) 섹션 구분 기호: ';' 문자는 형식 문자열에서 양수, 음수 및 0 숫자의 섹션을 구분하는 데 사용됩니다. (이 기능은 아래에 자세히 설명되어 있습니다.)
기타 다른 모든 문자: 다른 모든 문자는 출력 문자열에 나타나는 위치에 리터럴로 저장됩니다.

고정 소수점 형식 문자열('E0', 'E+0', 'E-0', 'e0', 'e+0' 또는 'e-0'을 포함하지 않는 문자열)의 경우 소수 구분 기호 오른쪽에 0 또는 숫자 자리 표시자가 있는 만큼 소수 자릿수로 반올림됩니다. 사용자 지정 형식에 소수 구분 기호가 없으면 숫자가 가장 가까운 정수로 반올림됩니다. 숫자가 소수 구분 기호의 왼쪽에 있는 0 또는 숫자 자리 표시자보다 더 많은 숫자를 가지면 첫 번째 0 또는 숫자 자리 표시자 바로 앞에 추가 숫자가 출력 문자열에 복사됩니다.

사용자 지정 형식은 양수, 음수 및 0 값에 대해 서로 다른 서식을 지정하기 위해 섹션 구분 기호 문자로 구분된 최대 3개의 섹션을 포함할 수 있습니다. 섹션은 다음과 같이 해석됩니다.

  • 한 섹션: 사용자 지정 형식은 모든 값(양수, 음수 및 0)에 적용됩니다. 음수 값은 음수 기호를 포함합니다.

  • 두 섹션: 첫 번째 섹션은 양수 값과 0에 적용되고 두 번째 섹션은 음수 값에 적용됩니다. 서식을 지정할 값이 음수이지만 두 번째 섹션의 형식에 따라 반올림한 후 0이 되면 결과 0은 첫 번째 섹션에 따라 형식이 지정됩니다. 음수 값에는 음수 값의 표현을 완전히 제어할 수 있는 음수 기호가 포함되지 않습니다. 예를 들어 '####.#과 유사한 사용자 지정 형식을 사용하여 음수는 괄호로 나타낼 수 있습니다. (####.####)’.

  • 세 섹션: 첫 번째 섹션은 양수 값에 적용되고, 두 번째 섹션은 음수 값에 적용되고, 세 번째 섹션은 0에 적용됩니다. 두 번째 섹션은 비어 있을 수 있으며(세미콜론 사이에 아무 것도 나타나지 않음) 이 경우 첫 번째 섹션은 0이 아닌 모든 값에 적용되고 음수 값에는 음수 기호가 포함됩니다. 서식을 지정할 숫자가 0이 아닌 경우 첫 번째 또는 두 번째 섹션의 형식에 따라 반올림한 후 0이 되면 결과 0은 세 번째 섹션에 따라 형식이 지정됩니다.

System.Enum 또한 형식 System.DateTime 지정자를 사용하여 값의 문자열 표현 서식을 지정할 수도 있습니다. 특정 형식 지정자의 의미는 서식이 지정되는 데이터(숫자, 날짜/시간, 열거형)의 종류에 따라 달라집니다. 각 형식에서 지원하는 형식 지정자의 포괄적인 목록을 참조 System.Enum 하세요 System.Globalization.DateTimeFormatInfo .

C.5 라이브러리 형식 약어

이 사양에서는 다음 라이브러리 형식을 참조합니다. 전역 네임스페이스 한정자를 포함하여 이러한 형식의 전체 이름이 아래에 나열되어 있습니다. 이 사양 전체에서 이러한 형식은 정규화된 이름으로 표시됩니다. 전역 네임스페이스 한정자를 생략했습니다. 또는 네임스페이스도 생략된 단순한 정규화되지 않은 형식 이름으로 지정합니다. 예를 들어 이 사양에서 사용되는 형식 ICollection<T>은 항상 형식 global::System.Collections.Generic.ICollection<T>을 의미합니다.

  • 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.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.Collections.ICollection
  • global::System.Collections.IEnumerable
  • global::System.Collections.IList
  • global::System.Collections.IEnumerator
  • global::System.Decimal
  • global::System.Delegate
  • global::System.Diagnostics.ConditionalAttribute
  • global::System.DivideByZeroException
  • global::System.Double
  • global::System.Enum
  • global::System.Exception
  • global::System.GC
  • global::System.ICollection
  • global::System.IDisposable
  • global::System.IEnumerable
  • global::System.IEnumerable<out T>
  • global::System.IList
  • global::System.IndexOutOfRangeException
  • global::System.Int16
  • global::System.Int32
  • global::System.Int64
  • global::System.IntPtr
  • global::System.InvalidCastException
  • global::System.InvalidOperationException
  • global::System.Linq.Expressions.Expression<TDelegate>
  • global::System.MemberInfo
  • global::System.NotSupportedException
  • global::System.Nullable<T>
  • global::System.NullReferenceException
  • global::System.Object
  • global::System.ObsoleteAttribute
  • global::System.OutOfMemoryException
  • global::System.OverflowException
  • global::System.Runtime.CompilerServices.CallerFileAttribute
  • global::System.Runtime.CompilerServices.CallerLineNumberAttribute
  • global::System.Runtime.CompilerServices.CallerMemberNameAttribute
  • 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.SByte
  • global::System.Single
  • global::System.StackOverflowException
  • global::System.String
  • global::System.SystemException
  • global::System.Threading.Monitor
  • global::System.Threading.Tasks.Task
  • global::System.Threading.Tasks.Task<TResult>
  • global::System.Type
  • global::System.TypeInitializationException
  • global::System.UInt16
  • global::System.UInt32
  • global::System.UInt64
  • global::System.UIntPtr
  • global::System.ValueType

정보 텍스트의 끝입니다.