250x250
Rainbow🌈Coder
My dev Note📒
Rainbow🌈Coder
전첎 방묞자
였늘
얎제
  • 분류 전첎볎Ʞ (411)
    • 공지사항 (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • 타입슀크늜튞 TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE 개발환겜섀정 (3)
      • React와 Node 같읎 때렀잡Ʞ (6)
      • next.js (2)
      • pixi.js (7)
    • 마크업 (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • 읎것읎 C#읎닀 (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(Ʞ쎈) (8)
      • Unity(C#쀑꞉) (5)
      • 유니티 포톀(넀튞워크) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • 슀프링 (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • 자료구조와 알고늬슘 (15)
      • 자료구조 (5)
      • 알고늬슘 (10)
    • 형상ꎀ늬 (15)
      • Git (11)
      • 소슀튞늬 (3)
    • 귞래픜슀 (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • 늬눅슀 (5)
      • 늬눅슀 (5)
    • 책 늬뷰 (13)
      • 큎늰윔드(책늬뷰) (3)
      • 유지볎수가능한윔딩의Ʞ술C#펾(책늬뷰) (1)
      • 늬팩토링(자바슀크늜튞판) (9)
    • Server (2)
      • 게임 서버(넀튞워크, 멀티쓰레드,OS) (2)
    • 섀계, 아킀텍쳐 (4)
    • 파읎썬 (5)
    • 디자읞팚턎 (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • 읞공지능 (1)
      • 혌자공부하는뚞신러닝+딥러닝 (1)

랔로귞 메뉎

  • 홈
  • 태귞
  • 방명록

공지사항

읞Ʞ Ꞁ

태귞

  • ㅣㄷ
  • MySQL
  • 컎포지션
  • 위임

최귌 댓Ꞁ

최귌 Ꞁ

티슀토늬

hELLO · Designed By 정상우.
Rainbow🌈Coder

My dev Note📒

C#/C#

[C#] 정수 숫자 형식

2022. 6. 11. 11:05
728x90

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/integral-numeric-types

 

정수 숫자 형식 - C# ì°žì¡°

각 정수 숫자 형식에 대한 범위, 슀토늬지 크Ʞ 및 용도에 대핮 알아뎅니닀.

docs.microsoft.com

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/language-specification/types#836-integral-types

 

Types - C# language specification

형식Types 아티큎 09/18/2021 읜는 데 48분 걞늌 Ʞ여자 2명 읎 묞서의 낎용 --> C # 얞얎의 형식은 value types _ 및 _ì°žì¡° 형식*_ 읎띌는 두 가지 죌요 범죌로 구분 됩니닀.The types of the C# language are divided into

docs.microsoft.com

 

정수 숫자 형식은 정수륌 표현합니닀. 몚든 정수 숫자 형식은 ê°’ 형식입니닀. 읎것은 êž°ë³ž 형식읎Ʞ도 하며, ëŠ¬í„°ëŸŽë¡œ 쎈Ʞ화할 수 있습니닀. 몚든 정수 숫자 형식은 ì‚°ìˆ , ë¹„튞 녌늬, ë¹„교 ë° ê°™ìŒ ì—°ì‚°ìžë¥Œ 지원합니닀.

정수 형식의 특성

C#은 닀음곌 같은 믞늬 정의된 정수 형식을 지원합니닀.

 

byte 1바읎튞 0~255

short 2바읎튞 -3만~3만

int 4바읎튞 -21억~21억

long 8바읎튞

 

여Ʞ서 s가 붙윌멎 음수

 

sbyte 1바읎튞 -128~127

ushort 2바읎튞 0~6만

uint 4바읎튞 0~43억

ulong 8바읎튞

C# 형식/킀워드범위크Ʞ.NET 형식
sbyte -128 ~ 127 부혞 있는 8비튞 정수 System.SByte
byte 0 ~ 255 부혞 없는 8비튞 정수 System.Byte
short –32,768 ~ 32,767 부혞 있는 16비튞 정수 System.Int16
ushort 0 ~ 65,535 부혞 없는 16비튞 정수 System.UInt16
int –2,147,483,648 ~ 2,147,483,647 부혞 있는 32비튞 정수 System.Int32
uint 0 ~ 4,294,967,295 부혞 없는 32비튞 정수 System.UInt32
long –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 부혞 있는 64비튞 정수 System.Int64
ulong 0 ~ 18,446,744,073,709,551,615 부혞 없는 64비튞 정수 System.UInt64
nint 플랫폌에 따띌 닀늄 부혞 있는 32비튞 또는 64비튞 정수 System.IntPtr
nuint 플랫폌에 따띌 닀늄 부혞 없는 32비튞 또는 64비튞 정수 System.UIntPtr

마지막 두 개륌 제왞한 몚든 테읎랔 행에서 ë§š 왌쪜 엎의 각 C# 형식 킀워드는 핎당하는 .NET 형식의 별칭입니닀. 킀워드와 .NET 형식 읎늄은 서로 바꿔 사용할 수 있습니닀. 예륌 듀얎 닀음 선얞은 동음한 형식의 변수륌 선얞합니닀.

C#복사
 
int a = 123;
System.Int32 b = 123;

표의 마지막 두 행에 있는 nint ë° nuint í˜•식은 Ʞ볞 크Ʞ 정수입니닀. 읎듀은 지정된 .NET 형식에 의핎 낎부적윌로 표시되지만, 각 겜우에 킀워드와 .NET 형식을 서로 바꿔 사용할 수 없습니닀. 컎파음러는 nint ë° nuint에 대한 작업 및 변환을 포읞터 형식 System.IntPtr ë° System.UIntPtr에 대핮 제공하지 않는 정수 형식윌로 제공합니닀. 자섞한 낎용은 nint ë° nuint형식을 찞조하섞요.

각 정수 형식의 Ʞ볞값은 0입니닀. Ʞ볞 크Ʞ 형식을 제왞한 각 정수 형식에는 핎당 형식의 최소값곌 최대값을 제공하는 MinValue ë° MaxValue ìƒìˆ˜ê°€ 있습니닀.

System.Numerics.BigInteger êµ¬ì¡°ì²Žë¥Œ 사용하여 상한 또는 하한읎 없는 부혞 있는 정수륌 나타냅니닀.

정수 늬터럎

정수 늬터럎은 닀음 형식음 수 있습니닀.

  • 10진: 접두사가 없음
  • 16진수: 0x ë˜ëŠ” 0X ì ‘두사 사용
  • 읎진: 0b ë˜ëŠ” 0B ì ‘두사 사용(C# 7.0 및 읎후 버전에서 가능)

닀음 윔드에서는 각 예제륌 볎여 쀍니닀.

C#복사
 
var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;

앞의 예제에서는 C# 7.0부터 지원되는 ìˆ«ìž 구분 Ʞ혞읞 _륌 사용하는 방법도 볎여 쀍니닀. 몚든 종류의 숫자 늬터럎에서 숫자 구분 Ʞ혞륌 사용할 수 있습니닀.

정수 늬터럎의 형식은 접믞사로 닀음곌 같읎 결정됩니닀.

  • 늬터럎에 접믞사가 없는 겜우 핎당 형식은 값읎 표현될 수 있는 int, uint, long, ulong í˜•식 쀑 첫 번짞 형식입니닀.
  •  ì°žê³ 
  • 늬터럎은 양수 값윌로 핎석됩니닀. 예륌 듀얎 늬터럎 0xFF_FF_FF_FF는 uint í˜•식의 숫자 4294967295륌 나타낎지만, int í˜•식의 숫자 -1곌 같은 비튞륌 표현합니닀. 특정 형식의 값읎 필요한 겜우 늬터럎을 핎당 형식윌로 캐슀팅합니닀. 늬터럎 값을 대상 유형윌로 표현할 수 없는 겜우 unchecked ì—°ì‚°ìžë¥Œ 사용합니닀. 예륌 듀얎 unchecked((int)0xFF_FF_FF_FF)는 -1을 생성합니닀.
  • 늬터럎에 접믞사가 U ë˜ëŠ” u읞 겜우 핎당 형식은 값읎 표현될 수 있는 uint, ulong í˜•식 쀑 첫 번짞 형식입니닀.
  • 늬터럎에 접믞사가 L ë˜ëŠ” l읞 겜우 핎당 형식은 값읎 표현될 수 있는 long, ulong í˜•식 쀑 첫 번짞 형식입니닀.
  •  ì°žê³ 
  • 소묞자 l륌 접믞사로 사용할 수 있습니닀. 귞러나 읎렇게 하멎 묞자 l ë° 숫자 1을 혌동하Ʞ 쉬우므로 컎파음러 겜고가 생성됩니닀. 쉜게 구별할 수 있도록 L을 사용합니닀.
  • 늬터럎의 접믞사가 UL, Ul, uL, ul, LU, Lu, lU ë˜ëŠ” lu읎멎 핎당 형식은 ulong입니닀.

정수 늬터럎로 표시되는 값읎 UInt64.MaxValue륌 쎈곌하멎 컎파음 였류 CS1021읎 발생합니닀.

결정된 정수 늬터럎 형식읎 int읎고 늬터럎읎 나타낮는 값읎 대상 형식의 범위 낎에 있는 겜우, 핎당 값읎 암시적윌로 sbyte, byte, short, ushort, uint, ulong, nint ë˜ëŠ” nuint윌로 변환될 수 있습니닀.

C#복사
 
byte a = 17;
byte b = 300;   // CS0031: Constant value '300' cannot be converted to a 'byte'

앞의 예제에서 볌 수 있듯읎 늬터럎 값읎 대상 형식의 범위 낎에 있지 않윌멎 컎파음러 였류 CS0031읎 발생합니닀.

캐슀튞륌 사용하여 정수 늬터럎로 표시되는 값을 결정된 늬터럎 형식 읎왞의 형식윌로 변환할 수도 있습니닀.

C#복사
 
var signedByte = (sbyte)42;
var longVariable = (long)42;

변환

몚든 정수 숫자 형식을 닀륞 정수 숫자 형식윌로 변환할 수 있습니닀. 대상 형식읎 소슀 형식의 몚든 값을 저장할 수 있는 겜우 변환은 암시적입니닀. 저장할 수 없는 겜우에는 ìºìŠ€íŠž 식륌 사용하여 명시적 변환을 수행핎알 합니닀. 자섞한 낎용은 êž°ë³ž 제공 숫자 변환을 찞조하섞요.

 

C # 얞얎의 형식은 value types _ 및 _ì°žì¡° 형식*_ 읎띌는 두 가지 죌요 범죌로 구분 됩니닀. ê°’ 형식곌 ì°žì¡° 형식은 몚두 하나 읎상의 _ í˜•식 맀개 변수 ë¥Œ 사용 하는 _제넀늭 형식음* ìˆ˜ 있습니닀. í˜•식 맀개 변수는 값 형식곌 ì°žì¡° 형식을 몚두 지정할 수 있습니닀.

antlr복사
 
type
    : value_type
    | reference_type
    | type_parameter
    | type_unsafe
    ;

형식, 포읞터의 최종 범죌는 안전 하지 않은 윔드 에서만 사용할 수 있습니닀. ìŽì— 대핎서는 í¬ìží„° 형식에 자섞히 섀명 되얎 있습니닀.

값 형식은 핎당 데읎터륌 직접 포핚 하는 반멎, ì°žì¡° 형식의 변수는 데읎터에 *ì°žì¡° _륌 저장 하 ê³ , 후자는 _ *개첎* *로 알렀진의 ì°žì¡° 형식곌 닀늅니닀. ì°žì¡° 형식을 사용 하는 겜우 두 변수가 같은 개첎륌 ì°žì¡°í•  수 있윌므로 한 변수에 대 한 작업읎 닀륞 변수에서 ì°žì¡° 하는 개첎에 영향을 쀄 수 있습니닀. ê°’ 형식을 사용 하는 겜우 변수에는 각각 고유한 데읎터 사볞읎 있윌며 한 변수에 대 한 작업읎 닀륞 변수에 영향을 쀄 수 없습니닀.

C #의 형식 시슀템은 몚든 형식의 값을 개첎로 처늬할 수 있도록 통합 되었습니닀. C#의 몚든 형식은 object íŽëž˜ìŠ€ 형식에서 직접 또는 간접적윌로 파생되고 object는 몚든 형식의 Ʞ볞 큎래슀입니닀. ì°žì¡° 형식의 값은 object로 읞식핚윌로썚 간닚히 개첎로 처늬됩니닀. ê°’ 형식의 값은 boxing 및 unboxing 작업 (boxing 및 unboxing)을 수행 하 여 개첎로 처늬 됩니닀.

값 형식

값 형식은 구조첎 형식 또는 엎거형 형식입니닀. C #에서는 ë‹šìˆœ 형식 ìŽëŒëŠ” 믞늬 정의 된 구조첎 형식의 집합을 제공 합니닀. ë‹šìˆœ 형식은 예앜얎륌 통핎 식별 됩니닀.

antlr복사
 
value_type
    : struct_type
    | enum_type
    ;

struct_type
    : type_name
    | simple_type
    | nullable_type
    ;

simple_type
    : numeric_type
    | 'bool'
    ;

numeric_type
    : integral_type
    | floating_point_type
    | 'decimal'
    ;

integral_type
    : 'sbyte'
    | 'byte'
    | 'short'
    | 'ushort'
    | 'int'
    | 'uint'
    | 'long'
    | 'ulong'
    | 'char'
    ;

floating_point_type
    : 'float'
    | 'double'
    ;

nullable_type
    : non_nullable_value_type '?'
    ;

non_nullable_value_type
    : type
    ;

enum_type
    : type_name
    ;

ì°žì¡° 형식의 변수와 달늬 값 형식의 변수는 값 null í˜•식읎 nullable 형식읞 겜우에만 값을 포핚할 수 있습니닀. Null을 허용 하지 않는 몚든 값 형식에 대핮 값곌 값의 동음한 집합을 나타낮는 핎당 nullable 값 형식읎 있습니닀 null .

값 형식의 변수에 할당 하멎 할당 되는 값의 복사볞읎 생성 됩니닀. ìŽëŠ” 찞조륌 복사 하지만 찞조로 식별 되는 개첎가 아닌 ì°žì¡° 형식의 변수에 대 한 할당곌 닀늅니닀.

System.object 형식

몚든 값 형식은 큎래슀에서 암시적윌로 상속 System.ValueType ë˜ë©°,읎는 큎래슀에서 상속 object ë©ë‹ˆë‹€. ëªšë“  형식읎 값 형식에서 파생 될 수 있는 것은 아닙니닀. 따띌서 값 형식은 암시적윌로 뎉읞 됩니닀 (뎉읞 된 큎래슀).

는 System.ValueType ìžì²Ž value_type ìŽ 아닙니닀. ëŒ€ì‹  몚든 value_type s가 자동윌로 파생 되는 class_type ìž…니닀.

Ʞ볞 생성자

몚든 값 형식은 *Ʞ볞 생성자 _ 띌고 하는 맀개 변수가 없는 public 읞슀턎슀 생성자륌 암시적윌로 ì„ ì–ž 합니닀. êž°ë³ž 생성자는 값 형식에 대핮 _ êž°ë³žê°’* 읎띌는 0윌로 쎈Ʞ화 된 읞슀턎슀륌 반환 합니닀.

  • 몚든 simple_type s의 겜우 Ʞ볞값은 비튞 팚턎에 의핎 생성 된 몚든 0의 값입니닀.
    • ,,,,,, 및의 겜우 sbyte byte êž°ë³žê°’은 short ushort int uint long ulong 0 ìž…니닀.
    • 의 겜우 char êž°ë³žê°’은 '\x0000' ìž…니닀.
    • 의 겜우 float êž°ë³žê°’은 0.0f ìž…니닀.
    • 의 겜우 double êž°ë³žê°’은 0.0d ìž…니닀.
    • 의 겜우 decimal êž°ë³žê°’은 0.0m ìž…니닀.
    • 의 겜우 bool êž°ë³žê°’은 false ìž…니닀.
  • Enum_type ì— 대 한 E êž°ë³žê°’은 0 í˜•식윌로 변환 된입니닀 E .
  • Struct_type ì˜ 겜우 Ʞ볞값은 몚든 값 형식 필드륌 Ʞ볞값윌로 섀정 하 ê³  몚든 ì°žì¡° 형식 필드륌로 섀정 하 여 생성 되는 값입니닀 null .
  • Nullable_type ì˜ 겜우 Ʞ볞값은 HasValue ì†ì„±ìŽ false읎 ê³  Value ì†ì„±ìŽ 정의 되얎 있지 않은 읞슀턎슀입니닀. êž°ë³žê°’은 nullable 형식의 null 값 ìŽ 띌고도 합니닀.

닀륞 읞슀턎슀 생성자와 마찬가지로 값 형식의 Ʞ볞 생성자는 연산자륌 사용 하 여 혞출 됩니닀 new . íššìœšì„±ì„ 위핎읎 요구 사항은 싀제로 구현에서 생성자 혞출을 생성 하지 않도록 하Ʞ 위한 것입니닀. ì•„래 예제에서 i ë° 변수 j ëŠ” 몚두 0윌로 쎈Ʞ화 됩니닀.

C#복사
 
class A
{
    void F() {
        int i = 0;
        int j = new int();
    }
}

몚든 값 형식에는 맀개 변수가 없는 public 읞슀턎슀 생성자가 암시적윌로 있윌므로 구조첎 형식에 맀개 변수가 없는 생성자의 명시적 선얞읎 포핚 될 수 없습니닀. ê·žëŸ¬ë‚˜ 구조첎 형식은 맀개 변수가 있는 읞슀턎슀 생성자 (생성자)륌 ì„ ì–ží•  수 있습니닀.

구조첎 형식

구조첎 형식은 상수, 필드, 메서드, 속성, 읞덱서, 연산자, 읞슀턎슀 생성자, 정적 생성자 및 쀑첩 형식을 ì„ ì–ží•  수 있는 값 형식입니닀. êµ¬ì¡°ì²Ž 형식 선얞은 êµ¬ì¡°ì²Ž 선얞에 섀명 되얎 있습니닀.

닚순 형식

C #에서는 ë‹šìˆœ 형식 ìŽëŒëŠ” 믞늬 정의 된 구조첎 형식의 집합을 제공 합니닀. ë‹šìˆœ 형식은 예앜얎륌 통핎 식별 되지만 읎러한 예앜얎는 System ì•„래 표에 섀명 된 대로 넀임 슀페읎슀의 믞늬 정의 된 구조첎 형식에 대 한 별칭입니닀.

예앜얎별칭읎 지정 되는 형식
sbyte System.SByte
byte System.Byte
short System.Int16
ushort System.UInt16
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
char System.Char
float System.Single
double System.Double
bool System.Boolean
decimal System.Decimal

닚순 형식에서 구조첎 형식의 별칭을 하므로 몚든 닚순 형식에는 멀버가 있습니닀. ì˜ˆë¥Œ 듀얎에는 int ì— ì„ ì–ž 된 멀버 System.Int32 ì™€ì—ì„œ 상속 된 멀버 System.Object ì™€ 닀음 묞읎 허용 됩니닀.

C#복사
 
int i = int.MaxValue;           // System.Int32.MaxValue constant
string s = i.ToString();        // System.Int32.ToString() instance method
string t = 123.ToString();      // System.Int32.ToString() instance method

닚순 형식은 특정 추가 작업을 허용한닀는 점에서 닀륞 구조첎 형식곌는 닀늅니닀.

  • 가장 간닚한 형식은 ëŠ¬í„°ëŸŽ (늬터럎)을 작성 하 여 값을 만듀 수 있도록 합니닀. ì˜ˆë¥Œ 듀얎, 123 ëŠ” 형식의 늬터럎읎 int ë©° 'a' ì€ 형식의 늬터럎입니닀 char . C #은 음반적윌로 구조첎 형식의 늬터럎을 프로 비전 하지 않윌며 닀륞 구조첎 형식의 Ʞ볞값읎 아닌 값은 궁극적윌로 항상 읎러한 구조첎 형식의 읞슀턎슀 생성자륌 통핎 생성 됩니닀.
  • 식의 플연산자가 몚두 닚순 형식 상수읞 겜우 컎파음러가 컎파음 시간에 식을 계산할 수 있습니닀. ìŽëŸ¬í•œ 식을 constant_expression (상수 식) 읎띌고 합니닀. ë‹€ë¥ž 구조첎 형식에 의핎 정의 된 연산자륌 포핚 하는 식은 상수 식윌로 간죌 되지 않습니닀.
  • const선얞을 통핎 닚순 형식 (상수)의 상수륌 ì„ ì–ží•  수 있습니닀. ë‹€ë¥ž 구조첎 형식의 상수는 있을 수 없지만 필드에서 비슷한 횚곌륌 제공 static readonly í•©ë‹ˆë‹€.
  • 닚순 형식을 포핚 하는 변환은 닀륞 구조첎 형식에 의핎 정의 된 변환 연산자의 평가에 찞여할 수 있지만 사용자 정의 변환 연산자는 닀륞 사용자 정의 연산자의 평가에 찞여할 수 없습니닀 (사용자 정의 변환 평가).

정수 계엎 형식 표

C #은,,,,,,, 및의 9 가지 정수 형식을 지원 sbyte byte short ushort int uint long ulong char í•©ë‹ˆë‹€. ì •수 계엎 형식은 닀음 크Ʞ와 범위의 값을 갖습니닀.

  • sbyte형식은-128곌 127 사읎의 값을 가진 부혞 있는 8 비튞 정수륌 나타냅니닀.
  • byte형식은 0에서 255 사읎의 값을 가진 부혞 없는 8 비튞 정수륌 나타냅니닀.
  • short형식은-32768곌 32767 사읎의 값을 가진 부혞 있는 16 비튞 정수륌 나타냅니닀.
  • ushort형식은 0에서 65535 사읎의 값을 가진 부혞 없는 16 비튞 정수륌 나타냅니닀.
  • int형식은-2147483648에서 2147483647 사읎의 값을 가진 부혞 있는 32 비튞 정수륌 나타냅니닀.
  • uint형식은 0곌 4294967295 사읎의 값을 가진 부혞 없는 32 비튞 정수륌 나타냅니닀.
  • long형식은-9223372036854775808곌 9223372036854775807 사읎의 값을 가진 부혞 있는 64 비튞 정수륌 나타냅니닀.
  • ulong형식은 0에서 18446744073709551615 사읎의 값을 가진 부혞 없는 64 비튞 정수륌 나타냅니닀.
  • char형식은 0에서 65535 사읎의 값을 가진 부혞 없는 16 비튞 정수륌 나타냅니닀. char í˜•식에 사용할 수 있는 값 집합은 유니윔드 묞자 집합곌 음치합니닀. char에는와 동음한 표현읎 있지만 ushort í•œ 형식에서 허용 되는 몚든 작업읎 닀륞 형식에서 허용 되는 것은 아닙니닀.

정수 계엎 형식 당항 및 읎항 연산자는 항상 부혞 있는 32 비튞 전첎 자늿수, 부혞 없는 32 비튞 전첎 자늿수, 부혞 있는 64 비튞 전첎 자늿수 또는 부혞 없는 64 비튞 전첎 자늿수륌 사용 하 여 작동 합니닀.

  • 당항 + ë° 연산자의 겜우 ~ í”Œì—°ì‚°ìžëŠ” 형식윌로 변환 됩니닀 T . 여Ʞ서 T ëŠ” int uint long ulong í”Œì—°ì‚°ìžì˜ 몚든 가능한 값을 완전히 나타낌 수 있는,, 및의 첫 번짞입니닀. ê·žëŸ° 닀음 형식의 전첎 자늿수륌 사용 하 여 작업을 수행 T í•˜ ê³  결곌의 형식은 T ìž…니닀.
  • 당항 연산자의 겜우 - í”Œì—°ì‚°ìžëŠ” 형식윌로 변환 되 T ê³ , 여Ʞ서 T ëŠ” int long í”Œì—°ì‚°ìžì˜ 몚든 가능한 값을 완전히 표현할 수 있는 및의 첫 번짞입니닀. ê·žëŸ° 닀음 형식의 전첎 자늿수륌 사용 하 여 작업을 수행 T í•˜ ê³  결곌의 형식은 T ìž…니닀. ë‹ší•­ - ì—°ì‚°ìžëŠ” 형식의 플연산자에 적용할 수 없습니닀 ulong .
  • Binary,,,,,,,,,,,, + - * / % & ^ | ë° 연산자의 겜우 == != > < >= <= í”Œì—°ì‚°ìžëŠ” 형식윌로 변환 됩니닀 T T . 여Ʞ서는 int uint long ulong ë‘ 플연산자의 몚든 가능한 값을 완전히 나타낌 수 있는,, 및의 첫 번짞입니닀. ê·žëŸ° 닀음 형식의 전첎 자늿수륌 사용 하 여 작업을 수행 T í•˜ ê³  결곌의 형식은 T (또는 bool êŽ€ê³„í˜• 연산자의 겜우)입니닀. í•œ 플연산자가 형식읎 long ê³  닀륞 플연산자는 읎진 연산자륌 사용 하 여 형식읎 되도록 허용 되지 않습니닀 ulong .
  • 읎항 << ë° 연산자의 겜우 >> ì™Œìªœ 플연산자가 형식윌로 변환 됩니닀 T . 여Ʞ서 T ëŠ” int uint long ulong í”Œì—°ì‚°ìžì˜ 몚든 가능한 값을 완전히 나타낌 수 있는,, 및의 첫 번짞 플연산자입니닀. ê·žëŸ° 닀음 형식의 전첎 자늿수륌 사용 하 여 작업을 수행 T í•˜ ê³  결곌의 형식은 T ìž…니닀.

char형식은 정수 계엎 형식윌로 분류 되지만 두 가지 방법윌로 닀륞 정수 계엎 형식곌 닀늅니닀.

  • 닀륞 형식에서 char í˜•식윌로의 암시적 변환은 없습니닀. íŠ¹ížˆ, 및 형식에는 sbyte byte ushort í˜•식을 사용 하 여 완전히 표현할 수 있는 값 범위가 있지만 char , 또는에서로의 암시적 변환읎 sbyte byte ushort char ì—†ìŠµë‹ˆë‹€.
  • char형식의 상수는 character_literal s로 작성 하거나 형식에 대 한 캐슀튞와 핚께 integer_literal ë¡œ 작성 되얎알 합니닀 char . ì˜ˆë¥Œ 듀얎 (char)10은 '\x000A'곌 같습니닀.

checked및 unchecked ì—°ì‚°ìžì™€ 묞은 정수 계엎 형식 산술 연산 및 변환 (checked 및 unchecked 연산자)에 대 한 였버플로 검사륌 제얎 하는 데 사용 됩니닀. checked컚텍슀튞에서 였버플로가 발생 하멎 컎파음 시간 였류가 발생 하거나읎 System.OverflowException throw 됩니닀. unchecked컚텍슀튞에서 였버플로는 묎시 되 ê³  대상 형식에 맞지 않는 상위 비튞는 묎시 됩니닀.

부동 소수점 형식

C #에서는 두 개의 부동 소수점 형식 float ë°ì„ 지원 double í•©ë‹ˆë‹€. float및 double í˜•식은 닀음 값 집합을 제공 하는 32 비튞 당 정밀도 및 64 비튞 배정밀도 IEEE 754 형식을 사용 하 여 표현 됩니닀.

  • 양의 0 및 음의 0. ëŒ€ë¶€ë¶„의 겜우 양의 0곌 음수 0은 닚순 값 0곌 동음 하 게 작동 하지만 특정 연산은 두 (나누Ʞ 연산자)륌 구분 합니닀.
  • 양의 묎한대 및 음의 묎한대 ë¬Ží•œëŒ€ëŠ” 0읎 아닌 숫자륌 0윌로 나누는 연산에 의핎 생성됩니닀. ì˜ˆë¥Œ 듀얎 1.0 / 0.0은 양의 묎한대륌 생성하고 -1.0 / 0.0은 음의 묎한대륌 생성합니닀.
  • 숫자가 아닌 ê°’ (종종 앜얎 NaN)입니닀. NaN은 0윌로 0 나누Ʞ와 같은 잘못된 부동 소수점 연산에 의핎 생성됩니닀.
  • 형식에 대 한 0읎 아닌 유한 값 집합입니닀 s * m * 2^e . 여Ʞ서 s ëŠ” 1 또는-1읎 ê³ ,은 m e íŠ¹ì • 부동 소수점 형식 (,, 및 float 0 < m < 2^24 -149 <= e <= 104 ì˜ double 0 < m < 2^53 -1075 <= e <= 970 ê²œìš°)에 의핎 결정 됩니닀. ë¹„ 정규화 된 부동 소수점 숫자는 0읎 아닌 유횚한 값윌로 간죌 됩니닀.

float형식은 대략에서 1.5 * 10^-45 3.4 * 10^38 7 자늬의 전첎 자늿수륌 갖는 값을 나타낌 수 있습니닀.

double형식은 대략에서 5.0 * 10^-324 1.7 × 10^308 15-16 자늬의 전첎 자늿수륌 갖는 값을 나타낌 수 있습니닀.

읎항 연산자의 플연산자 쀑 하나가 부동 소수점 형식읞 겜우 닀륞 플연산자는 정수 형식 또는 부동 소수점 형식 읎얎알 하며 연산은 닀음곌 같읎 계산 됩니닀.

  • 플연산자 쀑 하나가 정수 형식읎 멎 핎당 플연산자는 닀륞 플연산자의 부동 소수점 형식윌로 변환 됩니닀.
  • 귞런 닀음 플연산자 쀑 하나가 형식읞 겜우 double ë‹€ë¥ž 플연산자가로 변환 되 ê³  double , 최소 double ë²”위와 전첎 자늿수륌 사용 하 여 연산읎 수행 되며, 결곌의 형식읎 double (또는 bool êŽ€ê³„í˜• 연산자의 겜우)입니닀.
  • 귞렇지 않윌멎 최소 범위와 전첎 자늿수륌 사용 하 여 작업을 수행 하 float ê³ , 결곌의 형식은 float (또는 bool êŽ€ê³„í˜• 연산자의 겜우)입니닀.

할당 연산자륌 포핚 하는 부동 소수점 연산자는 예왞륌 생성 하지 않습니닀. ëŒ€ì‹ , 예왞 상황에서 부동 소수점 연산은 아래에 섀명 된 대로 0, 묎한대 또는 NaN을 생성 합니닀.

  • 부동 소수점 연산의 결곌가 대상 형식에 비핎 너묎 작은 겜우 연산 결곌가 양의 0 또는 음수 0읎 됩니닀.
  • 부동 소수점 연산의 결곌가 대상 형식에 비핎 너묎 큰 겜우 연산의 결곌는 양의 묎한대 또는 음의 묎한대가 됩니닀.
  • 부동 소수점 연산읎 잘못 된 겜우 작업의 결곌는 NaN읎 됩니닀.
  • 부동 소수점 연산의 플연산자 쀑 하나 또는 둘 닀가 NaN읎멎 연산 결곌가 NaN읎 됩니닀.

부동 소수점 연산은 작업의 결곌 형식 볎닀 높은 정밀도로 수행할 수 있습니닀. ì˜ˆë¥Œ 듀얎 음부 하드웚얎 아킀텍처는 형식 볎닀 더 크고 전첎 자늿수륌 포핚 하는 "확장" 또는 "long double" 부동 소수점 형식을 지원 double í•˜ 고읎 높은 전첎 자늿수 형식을 사용 하 여 몚든 부동 소수점 연산을 암시적윌로 수행 합니닀. ì„±ëŠ¥ìŽ 곌도 하 게 슝가 하는 겜우에만 읎러한 하드웚얎 아킀텍처륌 사용 하 여 정밀도가 낮은 부동 소수점 작업을 수행할 수 있윌며, 성능곌 전첎 자늿수륌 몚두 상싀 구현 핎알 하는 것은 아닙니닀. c #에서는 몚든 부동 소수점 연산에 더 높은 정밀도 형식을 사용할 수 있습니닀. ë³Žë‹€ 정확한 결곌륌 제공 하는 것 왞에도읎로 읞핎 잡정 가능한 영향읎 거의 없습니닀. ê·žëŸ¬ë‚˜ 곱하Ʞ에서 범위륌 벗얎나는 결곌륌 생성 하는 폌의 식에서 x * y / z double ìŽí›„ 나누Ʞ는 임시 결곌륌 범위에 닀시 표시 하지만 double ì‹ìŽ 더 높은 범위 형식윌로 계산 되 멎 묎한대 대신 유한 결곌가 생성 될 수 있습니닀.

10진 형식

decimal í˜•식은 재묎 및 통화 계산에 적합한 128비튞 데읎터 형식입니닀. ìŽ decimal í˜•식은에서 1.0 * 10^-28 7.9 * 10^28 28-29 자늬의 유횚 자늿수로 범위가 높은 값을 나타낌 수 있습니닀.

형식에 대 한 유한 값 집합은 형식 decimal ìž…니닀 (-1)^s * c * 10^-e . 여Ʞ에서 부혞는 s 0 또는 1읎 ê³  계수는에 c ì˜í•Ž 지정 되며 0 <= *c* < 2^96 ì†Œìˆ˜ 자늿수입니닀 e 0 <= e <= 28 . decimal í˜•식읎 signed 0, 묎한대 또는 NaN을 지원 하지 않습니닀. ëŠ” decimal 10의 거듭제곱윌로 크Ʞ가 조정 된 96 비튞 정수로 표시 됩니닀. ê°€ decimal ë³Žë‹€ 작은 절대값을 사용 하는 겜우 1.0m ê°’은 28 번짞 소수 자늿수와 동음 하지만 더 읎상 필요 하지 않습니닀. ê°€ decimal ë³Žë‹€ 크거나 같은 절대값을 사용 하는 겜우 1.0m ê°’은 28 또는 29 자늬 숫자와 동음 합니닀. float및 double ë°ìŽí„° 형식곌 달늬 0.1와 같은 소수 소수 자늿수는 표현에서 정확 하 게 표현할 수 있습니닀 decimal . float및 표현에서 double ìŽëŸ¬í•œ 숫자는 종종 묎한 분수로 표시 되므로 읎러한 표현은 반올늌 였류가 발생 하Ʞ 쉜습니닀.

읎항 연산자의 플연산자 쀑 하나가 형식읞 겜우 decimal ë‹€ë¥ž 플연산자는 정수 형식 또는 형식 읎얎알 합니닀 decimal . ì •수 계엎 형식 플연산자가 있는 겜우 decimal ìž‘업을 수행 하Ʞ 전에로 변환 됩니닀.

형식의 값에 대 한 연산의 결곌는 decimal ê° 연산자에 대핮 정의 된 대로 정확한 결곌 (소수 자늿수 유지)륌 계산한 닀음 표현에 맞게 반올늌 한 결곌입니닀. ê²°ê³ŒëŠ” 가장 가까욎 표현 가능한 값윌로 반올늌 되 ê³ , 결곌는 두 개의 표현할 수 있는 값곌 동음 하 게 비슷한 겜우 ("은행원의 반올늌" 읎띌고 핹) 0 읞 결곌는 항상 부혞가 0읎 ê³  소수 자늿수가 0입니닀.

Decimal 산술 연산읎 절대 값 볎닀 작거나 같은 값을 생성 하는 겜우 5 * 10^-29 ì—°ì‚°ì˜ 결곌는 0읎 됩니닀. decimal산술 연산에서 형식에 대핮 너묎 많은 결곌륌 생성 하는 겜우 decimal System.OverflowException ìŽ throw 됩니닀.

decimal형식읎 부동 소수점 형식 볎닀 정밀도는 크지만 범위가 작습니닀. ë”°ëŒì„œ 부동 소수점 형식에서로 변환 하멎 decimal ì˜€ë²„플로 예왞가 발생할 수 있윌며에서 decimal ë¶€ë™ 소수점 형식윌로 변환 하멎 전첎 자늿수가 손싀 될 수 있습니닀. ìŽëŸ¬í•œ 읎유로, 부동 소수점 형식곌, 명시적 캐슀튞가 없는 암시적 변환은 졎재 하지 않습니닀 decimal decimal . 동음한 식에서 부동 소수점곌 플연산자륌 혌합할 수 없습니닀.

Bool 형식

bool형식은 부욞 녌늬 수량을 나타냅니닀. í˜•식에 사용할 수 있는 값은 bool true ë° false ìž…니닀.

곌 닀륞 형식 사읎에는 표쀀 변환읎 없습니닀 bool . íŠ¹ížˆ bool í˜•식은 고유 하며 정수 계엎 형식곌 구분 되며, bool ê°’은 정수 계엎 값 대신 사용할 수 없윌며 ê·ž 반대의 겜우도 마찬가지입니닀.

C 및 c + + 얞얎에서 0 개의 정수 계엎 또는 부동 소수점 값 또는 null 포읞터륌 부욞 값윌로 변환 하거나 false 0읎 아닌 정수 계엎 또는 부동 소수점 값윌로 변환 하거나 null읎 아닌 포읞터륌 부욞 값윌로 변환할 수 있습니닀 true . C #에서 읎러한 변환은 정수 계엎 또는 부동 소수점 값을 0윌로 명시적윌로 비교 하거나 개첎 찞조륌에 명시적윌로 비교 하 여 수행 됩니닀 null .

엎거형 형식

엎거형 형식은 명명 된 상수가 있는 고유한 형식입니닀. ëªšë“  엎거형 형식에는,,,,, 또는 여알 하는 Ʞ볞 형식읎 있습니닀 byte sbyte short ushort int uint long ulong . ì—Žê±°í˜• 형식의 값 집합은 낎부 형식의 값 집합곌 동음 합니닀. ì—Žê±°í˜• 형식의 값은 명명 된 상수 값윌로 제한 되지 않습니닀. ì—Žê±°í˜• 형식은 엎거형 ì„ ì–ž (엎거형선얞)을 통핎 정의 됩니닀.

Nullable 유형

Nullable 형식은 핎당 êž°ë³ž 형식 ë° 추가 null 값의 몚든 값을 나타낌 수 있습니닀. Nullable 형식읎 작성 됩니닀 T? T . 여Ʞ서은 Ʞ볞 형식입니닀. ìŽ 구묞은의 축앜형 읎며 System.Nullable<T> ë‘ 가지 형태륌 서로 바꿔 사용할 수 있습니닀.

Null을 허용 하지 않는 값 형식 ë°˜ëŒ€ë¡œëŠ” System.Nullable<T> ë° 핎당 앜얎 T? (의 겜우) 및 null을 T í—ˆìš© 하지 않는 값 형식 (제앜 조걎읎 있는 몚든 형식 맀개 변수)윌로 제한 되는 몚든 형식 맀개 변수에 대 한 값 형식입니닀 struct . System.Nullable<T>형식은 T (형식 맀개 변수 제앜 조걎)에 대 한 값 형식 제앜 조걎을 지정 합니닀. 슉, nullable 형식의 Ʞ볞 형식읎 null을 허용 하지 않는 값 형식음 수 있습니닀. Nullable 형식의 Ʞ볞 형식은 nullable 형식 또는 ì°žì¡° 형식음 수 없습니닀. ì˜ˆë¥Œ 듀얎 int?? ë° string? ì€ 잘못 된 형식입니닀.

Nullable 형식의 읞슀턎슀는 T? ë‹€ìŒê³Œ 같은 두 개의 public 읜Ʞ 전용 속성을 포핚 합니닀.

  • HasValue형식의 속성bool
  • Value형식의 속성T

읎 true 읞 읞슀턎슀는 HasValue null읎 아닌 것윌로 간죌 됩니닀. Null읎 아닌 읞슀턎슀는 알렀진 값을 포핚 하 ê³  Value í•Žë‹¹ 값을 반환 합니닀.

가 false 읞 읞슀턎슀는 HasValue null 읎띌고 합니닀. Null 읞슀턎슀에 정의 되지 않은 값읎 있습니닀. Null 읞슀턎슀의륌 읜윌렀고 하멎읎 Value System.InvalidOperationException throw 됩니닀. Nullable 읞슀턎슀의 속성에 액섞슀 하는 프로섞슀륌 Value ëž˜í•‘ 핎제 ëŒê³  합니닀.

Ʞ볞 생성자 왞에도 몚든 nullable 형식에는 T? í˜•식의 닚음 읞수륌 사용 하는 public 생성자가 있습니닀 T . x형식의 값읎 지정 된 T ê²œìš° 폌의 생성자 혞출입니닀.

C#복사
 
new T?(x)

속성읎 읞의 null읎 아닌 읞슀턎슀륌 만듭니닀 T? Value x . ì§€ì • 된 값에 대핮 null을 허용 하지 않는 형식의 읞슀턎슀륌 만드는 프로섞슀륌 ëž˜í•‘ ìŽëŒê³  합니닀.

암시적 변환은 null ëŠ¬í„°ëŸŽì—ì„œ T? (Null 늬터럎 변환) 및에서 T T? (암시적 nullable 변환)로 사용할 수 있습니닀.

ì°žì¡° 형식

ì°žì¡° 형식은 큎래슀 형식, 읞터페읎슀 형식, ë°°ì—Ž 형식 또는 대늬자 형식입니닀.

antlr복사
 
reference_type
    : class_type
    | interface_type
    | array_type
    | delegate_type
    ;

class_type
    : type_name
    | 'object'
    | 'dynamic'
    | 'string'
    ;

interface_type
    : type_name
    ;

array_type
    : non_array_type rank_specifier+
    ;

non_array_type
    : type
    ;

rank_specifier
    : '[' dim_separator* ']'
    ;

dim_separator
    : ','
    ;

delegate_type
    : type_name
    ;

ì°žì¡° 형식 값은 형식의 *instance _에 대 한 ì°žì¡° 읎며, 후자는 _ *개첎* *로 알렀젞 있습니닀. íŠ¹ìˆ˜ 값은 null ëªšë“  ì°žì¡° 형식곌 혾환 되며 읞슀턎슀가 없음을 나타냅니닀.

큎래슀 형식

큎래슀 형식은 데읎터 멀버 (상수 및 필드), 핚수 멀버 (메서드, 속성, 읎벀튞, 읞덱서, 연산자, 읞슀턎슀 생성자, 소멞자 및 정적 생성자) 및 쀑첩 형식을 포핚 하는 데읎터 구조륌 정의 합니닀. íŽëž˜ìŠ€ 형식은 파생 큎래슀에서 Ʞ볞 큎래슀륌 확장 하 ê³  특수화할 수 있는 메컀니슘읞 상속을 지원 합니닀. íŽëž˜ìŠ€ 형식의 읞슀턎슀는 object_creation_expression s (개첎 생성 식)륌 사용 하 여 생성 됩니닀.

큎래슀 형식은 큎래슀에서 섀명합니닀.

믞늬 정의 된 특정 큎래슀 형식은 아래 표에 섀명 된 대로 c # 얞얎에서 특별 한 의믞륌 갖습니닀.

큎래슀 형식섀명
System.Object 닀륞 몚든 형식의 궁극적읞 Ʞ볞 큎래슀입니닀. ê°œì²Ž 형식을찞조 하섞요.
System.String C # 얞얎의 묞자엎 형식입니닀. ë¬žìžì—Ž 형식을찞조 하십시였.
System.ValueType 몚든 값 형식의 Ʞ볞 큎래슀입니닀. System.object 형식을찞조 하십시였.
System.Enum 몚든 엎거형 형식의 Ʞ볞 큎래슀입니닀. ì—Žê±°í˜•을 ì°žì¡° 하섞요.
System.Array 몚든 ë°°ì—Ž 형식의 Ʞ볞 큎래슀입니닀. ë°°ì—Žì„ 찞조하섞요.
System.Delegate 몚든 대늬자 형식의 Ʞ볞 큎래슀입니닀. ëŒ€ëŠ¬ìžë¥Œ ì°žì¡° 하섞요.
System.Exception 몚든 예왞 형식의 Ʞ볞 큎래슀입니닀. ì˜ˆì™žë¥Œ ì°žì¡° 하섞요.

개첎 유형

object큎래슀 형식은 닀륞 몚든 형식의 궁극적읞 Ʞ볞 큎래슀입니닀. C #의 몚든 형식읎 직접 또는 간접적윌로 object íŽëž˜ìŠ€ 형식에서 파생 됩니닀.

킀워드는 object ë‹šìˆœížˆ 믞늬 정의 된 큎래슀에 대 한 별칭입니닀 System.Object .

동적 형식

dynamic곌 같은 형식은 object ê°œì²Žë¥Œ ì°žì¡°í•  수 있습니닀. ì—°ì‚°ìžê°€ 형식의 식에 적용 되 멎 dynamic í”„로귞랚읎 싀행 될 때까지 핎당 확읞읎 지연 됩니닀. ë”°ëŒì„œ 연산자륌 ì°žì¡° 된 개첎에 합법적윌로 적용할 수 없는 겜우 컎파음하는 동안 였류가 제공 되지 않습니닀. ëŒ€ì‹  런타임에 연산자의 확읞읎 싀팚 하멎 예왞가 throw 됩니닀.

읎는 동적 바읞딩을 허용 하는 것입니닀 .읎는 ë™ì ë°”읞딩에 자섞히 섀명 되얎 있습니닀.

dynamic ëŠ” object ë‹€ìŒê³Œ 같은 잡멎에서륌 제왞 하 ê³  동음 하 게 간죌 됩니닀.

  • 형식의 식에 대 한 작업 dynamic ì€ 동적윌로 바읞딩될 수 있습니닀 (동적 바읞딩).
  • dynamic object ë‘ 후볎 몚두에 핎당 하는 겜우 형식 유추 (형식 유추)륌 사용 하는 것읎 좋습니닀.

읎러한 동등성 때묞에 닀음읎 포핚 됩니닀.

  • 및 사읎에는와 object dynamic ë¥Œ 바꿀 때 동음 하 게 생성 된 형식 간에 암시적 id 변환읎 있습니닀 dynamic . object
  • 및에서로의 암시적 변환곌 명시적 변환은 object ì—ë„ 적용 dynamic ë©ë‹ˆë‹€.
  • 로 바꿀 때 동음 하 게 사용 되는 메서드 시귞니처 dynamic object ëŠ” 동음한 서명윌로 간죌 됩니닀.
  • 런타임에서는 형식을 dynamic êµ¬ë¶„í•  수 없습니닀 object .
  • 형식의 식을 dynamic ë™ì  식 ìŽëŒê³  합니닀.

묞자엎 유형

string형식은에서 직접 상속 되는 뎉읞 된 큎래슀 형식입니닀 object . íŽëž˜ìŠ€ì˜ 읞슀턎슀는 string ìœ ë‹ˆìœ”드 묞자엎을 나타냅니닀.

형식의 값은 string ë¬žìžì—Ž 늬터럎 (묞자엎 늬터럎)로 작성할 수 있습니닀.

킀워드는 string ë‹šìˆœížˆ 믞늬 정의 된 큎래슀에 대 한 별칭입니닀 System.String .

읞터페읎슀 형식

읞터페읎슀는 계앜을 정의합니닀. ìží„°íŽ˜ìŽìŠ€ë¥Œ 구현 하는 큎래슀 또는 구조첎는 핎당 계앜을 따띌알 합니닀. ìží„°íŽ˜ìŽìŠ€ëŠ” 여러 Ʞ볞 읞터페읎슀에서 상속할 수 있윌며, 큎래슀 또는 구조첎는 여러 읞터페읎슀륌 구현할 수 있습니닀.

읞터페읎슀 형식은 ìží„°íŽ˜ìŽìŠ€ì— 섀명 되얎 있습니닀.

ë°°ì—Ž 형식

배엎은 계산 된 읞덱슀륌 통핎 액섞슀 되는 0 개 읎상의 변수륌 포핚 하는 데읎터 구조입니닀. ë°°ì—Žì— 포핚된 변수, 슉 배엎의 요소띌고도 하는 배엎은 몚두 같은 형식읎며, 읎 형식을 배엎의 요소 형식읎띌고 합니닀.

ë°°ì—Ž í˜•식은 배엎에섀명 되얎 있습니닀.

대늬자 형식

대늬자는 하나 읎상의 메서드륌 ì°žì¡° 하는 데읎터 구조입니닀. ìžìŠ€í„ŽìŠ€ 메서드는 핎당 개첎 읞슀턎슀도 ì°žì¡° 합니닀.

C 또는 c + +에서 대늬자와 가장 유사한 것은 핚수 포읞터 읎지만 핚수 포읞터는 정적 핚수만 ì°žì¡°í•  수 있지만 대늬자는 정적 메서드와 읞슀턎슀 메서드륌 몚두 ì°žì¡°í•  수 있습니닀. í›„자의 겜우 대늬자는 메서드 진입점에 대 한 ì°žì¡° 뿐만 아니띌 메서드륌 혞출할 개첎 읞슀턎슀에 대 한 찞조륌 저장 합니닀.

대늬자 형식은 ëŒ€ëŠ¬ìžì— 섀명 되얎 있습니닀.

boxing 및 unboxing

Boxing 및 unboxing의 개념은 c # 형식 시슀템의 핵심입니닀. Value_type ì˜ 몚든 값을 형식윌로 변환할 수 있도록 허용 하 여 value_type s와 reference_type ê°„의 람늬지륌 제공 object í•©ë‹ˆë‹€. Boxing 및 unboxing을 사용 하멎 몚든 형식의 값을 궁극적윌로 개첎로 처늬할 수 있는 형식 시슀템의 통합 뷰륌 사용할 수 있습니닀.

Boxing 변환

Boxing 변환을 사용 하멎 value_type ë¥Œ reference_type ìœŒë¡œ 암시적윌로 변환할 수 있습니닀. ë‹€ìŒ boxing 변환읎 있습니닀.

  • 몚든 value_type object ì—ì„œ 형식윌로
  • 몚든 value_type System.ValueType ì—ì„œ 형식윌로
  • 몚든 non_nullable_value_type ì—ì„œ value_type ì— 의핎 구현 되는 몚든 interface_type .
  • 몚든 nullable_type ì—ì„œ nullable_type ì˜ Ʞ볞 형식에 의핎 구현 되는 몚든 interface_type .
  • 몚든 enum_type System.Enum ì—ì„œ 형식윌로
  • Ʞ볞 enum_type ë¥Œ 사용 하는 몚든 nullable_type System.Enum ì—ì„œ 형식윌로
  • 런타임에 형식 맀개 변수에서의 암시적 변환은 값 형식에서 ì°žì¡° 형식윌로의 변환 (형식 맀개 변수륌 포핚 하는 암시적 변환)을 종료 하는 겜우 boxing 변환윌로 싀행 됩니닀.

Non_nullable_value_type ê°’을 Boxing 하는 것은 개첎 읞슀턎슀륌 할당 하 ê³  non_nullable_value_type ê°’을 핎당 읞슀턎슀에 복사 하는 것윌로 구성 됩니닀.

Nullable_type ì˜ 값을 Boxing 하멎 null ì°žì¡° null ( HasValue ê°€ 읞 겜우 false )가 반환 되 ê³ , 귞렇지 않은 겜우에는 래핑 핎제의 결곌가 반환 되 ê³ , 귞렇지 않은 겜우에는 Ʞ볞 값읎 boxing 됩니닀.

Non_nullable_value_type ê°’을 boxing 하는 싀제 프로섞슀는 닀음곌 같읎 ì„ ì–ž 된 것 처럌 동작 하는 음반 boxing 큎래슀 ì˜ 졎재륌 발견 하 여 섀명 하는 것읎 가장 좋습니닀.

C#복사
 
sealed class Box<T>: System.ValueType
{
    T value;

    public Box(T t) {
        value = t;
    }
}

읎제 형식의 값에 대 한 Boxing은 v T ì‹ì„ 싀행 new Box<T>(v) í•˜ ê³  결곌 읞슀턎슀륌 형식의 값윌로 반환 하는 것윌로 구성 됩니닀 object . ë”°ëŒì„œ 묞읎

C#복사
 
int i = 123;
object box = i;

개념적윌로 닀음에 핎당 합니닀.

C#복사
 
int i = 123;
object box = new Box<int>(i);

위와 같은 boxing 큎래슀는 Box<T> ì‹€ì œë¡œ 졎재 하지 않윌며 boxed 값의 동적 형식은 싀제로 큎래슀 형식읎 아닙니닀. ëŒ€ì‹  형식의 boxed 값에는 T ë™ì  형식읎 있윌며 T ì—°ì‚°ìžë¥Œ 사용 하는 동적 형식 검사는 is ë‹šìˆœížˆ 형식을 ì°žì¡°í•  수 있습니닀 T . ì˜ˆì œ:

C#복사
 
int i = 123;
object box = i;
if (box is int) {
    Console.Write("Box contains an int");
}

는 윘솔에 "" 묞자엎을 출력 합니닀 Box contains an int .

Boxing 변환은 값의 복사볞을 boxed로 만드는 것을 의믞 합니닀. ìŽëŠ” reference_type ë¥Œ 형식윌로 변환 하는 것곌 닀늅니닀 object .읎 값은 계속 핮 서 동음한 읞슀턎슀륌 ì°žì¡° 하 ê³  간닚히 파생 된 형식윌로 간죌 됩니닀 object . ì˜ˆë¥Œ 듀얎 선얞읎 지정 된 겜우

C#복사
 
struct Point
{
    public int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

닀음 묞

C#복사
 
Point p = new Point(10, 10);
object box = p;
p.x = 20;
Console.Write(((Point)box).x);

는의 할당에서 발생 하는 암시적 boxing 작업윌로 읞핎의 값읎 복사 되Ʞ 때묞에는 윘솔에서 값 10을 출력 p box p í•©ë‹ˆë‹€. Point가 대신로 ì„ ì–ž 된 class ê²œìš° p ë° box ê°€ 같은 읞슀턎슀륌 ì°žì¡° 하Ʞ 때묞에 20 값읎 출력 됩니닀.

Unboxing 변환

Unboxing 변환을 사용 하멎 reference_type ë¥Œ value_type ë¡œ 명시적윌로 변환할 수 있습니닀. ë‹€ìŒ unboxing 변환읎 있습니닀.

  • 형식에서 object value_type í•©ë‹ˆë‹€.
  • 형식에서 System.ValueType value_type í•©ë‹ˆë‹€.
  • 몚든 interface_type ì—ì„œ interface_type ë¥Œ 구현 하는 non_nullable_value_type í•©ë‹ˆë‹€.
  • 몚든 interface_type ì—ì„œ 낎부 형식읎 interface_type ë¥Œ 구현 하는 몚든 nullable_type .
  • 형식에서 System.Enum enum_type í•©ë‹ˆë‹€.
  • 형식에서 System.Enum ë‚Žë¶€ enum_type ìžˆëŠ” 몚든 nullable_type ë¡œ
  • 형식 맀개 변수로의 명시적 변환은 런타임에 ì°žì¡° 형식에서 값 형식윌로의 변환 (명시적 동적 변환)을 종료 하는 겜우 unboxing 변환윌로 싀행 됩니닀.

Non_nullable_value_type ì— 대 한 unboxing 작업은 뚌저 개첎 읞슀턎슀가 지정 된 non_nullable_value_type ì˜ boxing 된 값 읞지 확읞 한 닀음 읞슀턎슀 왞부에서 값을 복사 하는 것윌로 구성 됩니닀.

Nullable_type ì— 대 한 Unboxing은 소슀 플연산자가 읞 겜우 nullable_type ì˜ null 값을 생성 하 ê³ , 귞렇지 않은 겜우에는 null ê°œì²Ž 읞슀턎슀륌 nullable_type ì˜ 낎부 형식윌로 unboxing 합니닀.

읎전 섹션에 섀명 된 허수 boxing 큎래슀륌 ì°žì¡° 하는 겜우 개첎륌 value_type로 unboxing 변환 하는 것은 식을 싀행 하는 것윌로 box T êµ¬ì„± 됩니닀 ((Box<T>)box).value . ë”°ëŒì„œ 묞읎

C#복사
 
object box = 123;
int i = (int)box;

개념적윌로 닀음에 핎당 합니닀.

C#복사
 
object box = new Box<int>(123);
int i = ((Box<int>)box).value;

지정 된 non_nullable_value_type ì— 대 한 unboxing 변환읎 런타임에 성공 하렀멎 소슀 플연산자의 값읎 non_nullable_value_type boxed 값에 대 한 ì°žì¡° 여알 합니닀. ì†ŒìŠ€ 플연산자가 읞 겜우 null System.NullReferenceException ìŽ throw 됩니닀. ì†ŒìŠ€ 플연산자가 혾환 되지 않는 개첎에 대 한 ì°žì¡° 읎멎 System.InvalidCastException ìŽ throw 됩니닀.

지정 된 nullable_type ì— 대 한 unboxing 변환읎 런타임에 성공 하렀멎 소슀 플연산자의 값읎 null nullable_type ì˜ Ʞ볞 non_nullable_value_type boxed 값에 대 한 ì°žì¡° 여알 합니닀. ì†ŒìŠ€ 플연산자가 혾환 되지 않는 개첎에 대 한 ì°žì¡° 읎멎 System.InvalidCastException ìŽ throw 됩니닀.

생성 된 형식

제넀늭 형식 선얞은 *형식 읞수* ë¥Œ 적용 하 여 닀양 한 형식을 형성 하는 "청사진"윌로 사용 되는 *바읞딩되지 않은 제넀늭 형식 ë¥Œ 나타냅니닀.. í˜•식 읞수는 < > ì œë„€ëŠ­ 형식의 읎늄 바로 뒀에 였는 꺟쇠 ꎄ혞 (및) 낎에 Ʞ록 됩니닀. í•˜ë‚˜ 읎상의 형식 읞수륌 포핚 하는 형식을 *생성 된 형식* ìŽëŒê³  합니닀. ìƒì„± 된 형식은 형식 읎늄읎 표시 될 수 있는 얞얎의 대부분의 위치에서 사용할 수 있습니닀. ë°”읞딩되지 않은 제넀늭 형식은 _typeof_expression * (typeof 연산자) 낮 에서만 사용할 수 있습니닀.

생성 된 형식은 식에서닚순한 읎늄윌로사용 되거나 멀버 (멀버 액섞슀)에 액섞슀할 때 사용 될 수도 있습니닀.

Namespace_or_type_name ë¥Œ 평가 하는 겜우 올바륞 수의 형식 맀개 변수가 있는 제넀늭 형식만 ê³ ë € 됩니닀. ë”°ëŒì„œ 형식읎 닀륞 형식의 맀개 변수륌 사용 하는 겜우 동음한 식별자륌 사용 하 여 서로 닀륞 형식을 식별할 수 있습니닀. ìŽëŠ” 동음한 프로귞랚에서 제넀늭 및 비 제넀늭 큎래슀륌 혌합할 때 유용 합니닀.

C#복사
 
namespace Widgets
{
    class Queue {...}
    class Queue<TElement> {...}
}

namespace MyApplication
{
    using Widgets;

    class X
    {
        Queue q1;            // Non-generic Widgets.Queue
        Queue<int> q2;       // Generic Widgets.Queue
    }
}

Type_name ëŠ” 형식 맀개 변수륌 직접 지정 하지 않더띌도 생성 된 형식을 식별할 수 있습니닀. ìŽëŠ” 제넀늭 큎래슀 ì„ ì–ž 낎에서 형식읎 쀑첩 되 ê³  포핚 선얞의 읞슀턎슀 형식읎 읎늄 조회에 암시적윌로 사용 되는 겜우 (제넀늭 큎래슀의 쀑첩 형식) 발생할 수 있습니닀.

C#복사
 
class Outer<T>
{
    public class Inner {...}

    public Inner i;                // Type of i is Outer<T>.Inner
}

안전 하지 않은 윔드에서는 생성 된 형식을 unmanaged_type (포읞터 형식)로 사용할 수 없습니닀.

형식 읞수

형식 읞수 목록의 각 읞수는 닚순한 í˜•식 ìž…니닀.

antlr복사
 
type_argument_list
    : '<' type_arguments '>'
    ;

type_arguments
    : type_argument (',' type_argument)*
    ;

type_argument
    : type
    ;

안전 하지 않은 윔드 (안전 하지 않은 윔드)에서는 type_argument í¬ìží„° 형식읎 될 수 없습니닀. ê° 형식 읞수는 핎당 형식 맀개 변수 (형식 맀개 변수 제앜 조걎)에 대 한 제앜 조걎을 충족 핎알 합니닀.

Open 및 closed 형식

몚든 형식은 *open types _ 또는 _ íì‡„형 유형 *윌로 분류 될 수 있습니닀. ê°œë°©í˜• 형식은 형식 맀개 변수륌 포핚 하는 형식입니닀. ë” 구첎적윌로 삎펎볎멎 닀음곌 같습니닀.

  • 형식 맀개 변수는 개방형 형식을 정의 합니닀.
  • ë°°ì—Ž 형식은 요소 형식읎 개방형 형식읞 겜우에만 개방형 형식입니닀.
  • 생성 된 형식은 핎당 형식 읞수 쀑 하나 읎상읎 개방형 형식읞 겜우에만 개방형 형식입니닀. ìƒì„± 된 쀑첩 형식은 핎당 형식 읞수 쀑 하나 읎상읎 나 포핚 하는 형식의 형식 읞수가 개방형 형식읞 겜우에만 개방형 형식입니닀.

폐쇄형 형식은 개방형 형식읎 아닌 형식입니닀.

런타임에 제넀늭 형식 ì„ ì–ž 낎의 몚든 윔드는 제넀늭 선얞에 형식 읞수륌 적용 하 여 만든 폐쇄형 생성 형식의 컚텍슀튞에서 싀행 됩니닀. ì œë„€ëŠ­ 형식 낎의 각 형식 맀개 변수는 특정 런타임 형식에 바읞딩됩니닀. ëªšë“  묞곌 식의 런타임 처늬는 항상 폐쇄형 형식윌로 발생 하며, 개방형 형식은 컎파음 시간 처늬 쀑에만 발생 합니닀.

폐쇄형 생성 된 각 형식에는 닀륞 폐쇄형 생성 형식곌 공유 되지 않는 고유한 정적 변수 집합읎 있습니닀. ëŸ°íƒ€ìž„에는 개방형 형식읎 없윌므로 개방형 형식곌 연결 된 정적 변수는 없습니닀. ë‘ 폐쇄형 생성 형식은 동음한 바읞딩되지 않은 제넀늭 형식에서 생성 된 겜우 동음한 형식읎 ê³  핎당 형식 읞수는 동음한 형식입니닀.

바읞딩된 형식 및 바읞딩되지 않은 형식

* 바읞딩되지 않은 í˜•식 _ 읎란 용얎는 제넀늭읎 아닌 형식읎 나 바읞딩되지 않은 제넀늭 형식을 ì°žì¡° 합니닀. _ Bound 형식* 읎띌는 용얎는 제넀늭읎 아닌 형식읎 나 생성 된 형식을 나타냅니닀.

바읞딩되지 않은 형식은 형식 선얞에 의핎 ì„ ì–ž 된 엔터티륌 ì°žì¡° 합니닀. ë°”읞딩되지 않은 제넀늭 형식은 자첎가 형식읎 아니므로 변수, 읞수 또는 반환 값의 형식 또는 Ʞ볞 형식윌로 사용할 수 없습니닀. ë°”읞딩되지 않은 제넀늭 형식을 ì°žì¡°í•  수 있는 유음한 구묞은 typeof ì‹ (typeof 연산자)입니닀.

만족 제앜 조걎

생성 된 형식 또는 제넀늭 메서드가 ì°žì¡° 될 때마닀 제공 된 형식 읞수는 제넀늭 형식 또는 메서드 (형식 맀개 변수 제앜 조걎)에 ì„ ì–ž 된 형식 맀개 변수 제앜 조걎에 대핮 검사 됩니닀. ê° 절에 대핮 where A ëª…명 된 형식 맀개 변수에 핎당 하는 형식 읞수는 각 제앜 조걎에 대핮 닀음곌 같읎 확읞 됩니닀.

  • 제앜 조걎읎 큎래슀 형식, 읞터페읎슀 형식 또는 형식 맀개 변수읞 겜우 제공 된 형식 읞수륌 사용 하 여 제앜 조걎 C ì— 표시 되는 형식 맀개 변수에 대핮 대첎 된 제앜 조걎을 나타냅니닀. ì œì•œ 조걎을 충족 하렀멎 형식읎 A ë‹€ìŒ 쀑 하나륌 통핎 형식윌로 변환 될 수 있얎알 합니닀 C .
    • Id 변환 (id 변환)
    • 암시적 ì°žì¡° 변환 (암시적 ì°žì¡° 변환)
    • 형식 A가 null을 허용 하지 않는 값 형식읞 겜우 boxing 변환 (boxing 변환)입니닀.
    • 형식 맀개 변수에서로의 암시적 ì°žì¡°, boxing 또는 형식 맀개 변수 변환 A C ìž…니닀.
  • 제앜 조걎읎 ì°žì¡° 형식 제앜 조걎 () 읎멎 class í˜•식은 A ë‹€ìŒ 쀑 하나륌 충족 핎알 합니닀.
    • A ëŠ” 읞터페읎슀 형식, 큎래슀 형식, 대늬자 형식 또는 ë°°ì—Ž 형식입니닀. ë°ëŠ” System.ValueType System.Enum ìŽ 제앜 조걎을 충족 하는 ì°žì¡° 형식입니닀.
    • A ëŠ” ì°žì¡° 형식 (형식 맀개 변수 제앜 조걎)윌로 알렀진 형식 맀개 변수입니닀.
  • 제앜 조걎읎 값 형식 제앜 조걎 () 읎멎 struct í˜•식은 A ë‹€ìŒ 쀑 하나륌 충족 핎알 합니닀.
    • A ëŠ” 구조첎 형식 또는 엎거형 형식 읎지만 nullable 형식읎 아닙니닀. ë°ëŠ” System.ValueType System.Enum ìŽ 제앜 조걎을 충족 하지 않는 ì°žì¡° 형식입니닀.
    • A ê°’ 형식 제앜 조걎 (형식 맀개 변수 제앜조걎)을 포핚 하는 형식 맀개 변수입니닀.
  • 제앜 조걎읎 생성자 제앜 조걎읎 멎 형식은읎 아니얎알 new() A abstract í•˜ë©° 맀개 변수가 없는 public 생성자가 있얎알 합니닀. ë‹€ìŒ 조걎 쀑 하나에 핎당 하는 겜우읎 묞제가 충족 됩니닀.
    • A ëªšë“  값 형식에는 공용 Ʞ볞 생성자 (Ʞ볞 생성자)가 있Ʞ 때묞에은 값 형식입니닀.
    • A ìƒì„±ìž 제앜 조걎 (형식 맀개 변수 제앜 조걎)을 포핚 하는 형식 맀개 변수입니닀.
    • A ê°’ 형식 제앜 조걎 (형식 맀개 변수 제앜조걎)을 포핚 하는 형식 맀개 변수입니닀.
    • A ê°€ìŽ 아니고 abstract ë§€ê°œ 변수 없읎 명시적윌로 ì„ ì–ž 된 생성자륌 포핚 하는 큎래슀입니닀 public .
    • A ê°€ìŽ 아니고 abstract êž°ë³ž 생성자 (Ʞ볞생성자)가 있는 겜우

지정 된 형식 읞수에서 하나 읎상의 형식 맀개 변수 제앜 조걎읎 충족 되지 않윌멎 컎파음 시간 였류가 발생 합니닀.

형식 맀개 변수는 상속 되지 않윌므로 제앜 조걎은 상속 되지 않습니닀. ì•„래 예제에서는가 D T T êž°ë³ž 큎래슀에서 적용 되는 제앜 조걎을 충족 하도록 핎당 형식 맀개 변수에 대 한 제앜 조걎을 지정 핎알 B<T> í•©ë‹ˆë‹€. ë°˜ë©Ž, 큎래슀는 E ì— 대핎륌 구현 하므로 제앜 조걎을 지정할 필요가 없습니닀 List<T> IEnumerable T .

C#복사
 
class B<T> where T: IEnumerable {...}

class D<T>: B<T> where T: IEnumerable {...}

class E<T>: B<List<T>> {...}

형식 맀개 변수

형식 맀개 변수는 런타임에 맀개 변수가 바읞딩되는 값 형식 또는 ì°žì¡° 형식을 지정 하는 식별자입니닀.

antlr복사
 
type_parameter
    : identifier
    ;

형식 맀개 변수는 닀양 한 싀제 형식 읞수륌 사용 하 여 읞슀턎슀화할 수 있윌므로 형식 맀개 변수에는 닀륞 형식곌는 앜간 닀륞 작업곌 제한읎 있습니닀. ì—¬êž°ì—ëŠ” 닀음읎 포핚됩니닀.

  • 형식 맀개 변수륌 직접 사용 하 여 Ʞ볞 큎래슀 (Ʞ볞 큎래슀) 또는 읞터페읎슀 (Variant 형식 맀개 변수 목록)륌 ì„ ì–ží•  수 없습니닀.
  • 형식 맀개 변수에 대 한 멀버 조회 규칙은 형식 맀개 변수에 적용 되는 제앜 조걎 (있는 겜우)에 따띌 달띌 집니닀. ë©€ë²„ 조회에 자섞히 섀명 되얎 있습니닀.
  • 형식 맀개 변수에 사용 가능한 변환은 형식 맀개 변수에 적용 되는 제앜 조걎 (있는 겜우)에 따띌 달띌 집니닀. í˜•식 맀개 변수 ë° ëª…시적 동적 변환곌ꎀ렚 된 암시적 변환에 자섞히 섀명 되얎 있습니닀.
  • 형식 맀개 변수가 null ì°žì¡° 형식 (형식 맀개 변수와 ꎀ렚 된 암시적 변환) 읎띌고 알렀진 겜우륌 제왞 하 고는 형식 맀개 변수에 지정 된 형식윌로 늬터럎을 변환할 수 없습니닀. ê·žëŸ¬ë‚˜ default ì‹ (Ʞ볞값 식)을 대신 사용할 수 있습니닀. ë˜í•œ 형식 맀개 변수에서 값 형식 제앜 조걎을 사용 하지 않는 한, 형식 맀개 변수에 지정 된 형식의 값을 null == ë° != (ì°žì¡° 형식 같음 연산자)륌 사용 하 여 비교할 수 있습니닀.
  • new형식 맀개 변수가 constructor_constraint ë˜ëŠ” 값 형식 제앜 조걎 (형식 맀개 변수 제앜조걎)에 의핎 제한 되는 겜우에만 식 (개첎 생성 식)을 형식 맀개 변수와 핚께 사용할 수 있습니닀.
  • 특성 낎에서 형식 맀개 변수륌 사용할 수 없습니닀.
  • 멀버 액섞슀 (멀버 액섞슀) 또는 형식 읎늄 (넀임 슀페읎슀 및 형식 읎늄)에서 형식 맀개 변수륌 사용 하 여 정적 멀버나 쀑첩 형식을 식별할 수 없습니닀.
  • 안전 하지 않은 윔드에서 형식 맀개 변수는 unmanaged_type (포읞터 형식)로 사용할 수 없습니닀.

형식윌로 형식 맀개 변수는 순수 컎파음 시간 구묞입니닀. ëŸ°íƒ€ìž„에 각 형식 맀개 변수는 제넀늭 형식 선얞에 형식 읞수륌 제공 하 여 지정 된 런타임 형식에 바읞딩됩니닀. ë”°ëŒì„œ 형식 맀개 변수륌 사용 하 여 ì„ ì–ž 된 변수의 형식은 런타임에 폐쇄형 생성 형식 (개방형 및 폐쇄형 형식)읎 됩니닀. í˜•식 맀개 변수륌 포핚 하는 몚든 묞곌 식의 런타임 싀행에서는 핎당 맀개 변수에 대 한 형식 읞수로 제공 된 싀제 형식을 사용 합니닀.

식 튞늬 형식

*식 튞늬 _는 람닀 식을 싀행 윔드 대신 데읎터 구조로 표현할 수 있도록 허용 합니닀. ì‹ 튞늬는 형식의 _ ì‹ 튞늬 형식* 값입니닀 System.Linq.Expressions.Expression<D> D . 여Ʞ서는 대늬자 형식입니닀. ìŽ 사양의 나뚞지 부분에서는 앜얎륌 사용 하 여 읎러한 형식을 ì°žì¡° 합니닀 Expression<D> .

람닀 식에서 대늬자 형식윌로의 변환읎 있는 겜우 D ì‹ 튞늬 형식에 대 한 변환도 있습니닀 Expression<D> . ëžŒë‹€ 식을 대늬자 형식윌로 변환 하는 겜우 람닀 식의 싀행 윔드륌 ì°žì¡° 하는 대늬자륌 생성 합니닀. 식 튞늬 형식윌로 변환 하멎 람닀 식의 식 튞늬 표현읎 생성 됩니닀.

식 튞늬는 람닀 식의 횚윚적읞 메몚늬 낮 데읎터 표현 읎며 람닀 식의 구조륌 투명 하 ê³  명시적윌로 만듭니닀.

대늬자 형식곌 마찬가지로에는 D ì™€ Expression<D> ë™ìŒí•œ 맀개 변수 및 반환 형식읎 있닀고 D í•©ë‹ˆë‹€.

닀음 예제에서는 람닀 식을 싀행 윔드와 식 튞늬로 나타냅니닀. ì— 대 한 변환읎 졎재 하Ʞ 때묞에 Func<int,int> ë‹€ìŒê³Œ 같은 변환도 있습니닀 Expression<Func<int,int>> .

C#복사
 
Func<int,int> del = x => x + 1;                    // Code

Expression<Func<int,int>> exp = x => x + 1;        // Data

읎러한 할당을 수행 하멎 대늬자는 del ì„ 반환 하는 메서드륌 ì°žì¡° x + 1 í•˜ ê³  식 튞늬는 exp ì‹ì„ 섀명 하는 데읎터 구조륌 ì°žì¡° 합니닀 x => x + 1 .

Expression<D>람닀 식읎 식 튞늬 형식윌로 변환 될 때 식 튞늬륌 생성 하는 정확한 규칙 뿐만 아니띌 제넀늭 형식의 정확한 정의는 몚두읎 사양의 범위륌 벗얎납니닀.

명시적윌로 수행 하는 두 가지 쀑요 한 사항은 닀음곌 같습니닀.

  • 몚든 람닀 식을 식 튞늬로 변환할 수 있는 것은 아닙니닀. ì˜ˆë¥Œ 듀얎, 묞 볞묞읎 있는 람닀 식곌 대입 식을 포핚 하는 람닀 식은 표현할 수 없습니닀. ìŽëŸ¬í•œ 겜우 변환은 여전히 졎재 하지만 컎파음 시간에는 싀팚 합니닀. ìŽëŸ¬í•œ 예왞는 ìµëª… 핚수 변환에 자섞히 섀명 되얎 있습니닀.
  • Expression<D>``Compile형식의 대늬자륌 생성 하는 읞슀턎슀 메서드륌 제공 합니닀 D .
    Func<int,int> del2 = exp.Compile();
    
    읎 대늬자륌 혞출 하멎 식 튞늬로 표시 되는 윔드가 싀행 됩니닀. ë”°ëŒì„œ 위의 정의륌 사용할 겜우 del곌 del2는 동음 하 ê³  닀음 두 묞은 동음한 결곌륌 발생 시킬 수 있습니닀.
    int i1 = del(1);
    
    int i2 = del2(1);
    
    읎 윔드륌 싀행 한 후 및에는 i1 i2 ëªšë‘ 값읎 2 ìžˆìŠµë‹ˆë‹€.
  • C#복사
     
  • C#복사
     
728x90

'C# > C#' 칎테고늬의 닀륞 Ꞁ

Array.CreateInstance 메서드  (0) 2022.10.09
큎래슀륌 배엎로 선얞하Ʞ  (0) 2022.02.24
필드, 멀버, 지역변수, 정적필드, 정적 메소드 개념 정늬  (0) 2022.02.14
[C#]묞자엎 출력 여러가지 방법  (0) 2022.02.04
[C# 윘솔] 5x5 동귞띌믞판 출력  (0) 2022.02.02
    'C#/C#' 칎테고늬의 닀륞 Ꞁ
    • Array.CreateInstance 메서드
    • 큎래슀륌 배엎로 선얞하Ʞ
    • 필드, 멀버, 지역변수, 정적필드, 정적 메소드 개념 정늬
    • [C#]묞자엎 출력 여러가지 방법
    Rainbow🌈Coder
    Rainbow🌈Coder
    몰띌도 결국은 아는 개발자, 귞런 사람읎 되Ʞ 위한 맀음의 한걞음

    티슀토늬툎바