ì ì ì«ì íì - C# ì°žì¡°
ê° ì ì ì«ì íìì ëí ë²ì, ì€í ëŠ¬ì§ í¬êž° ë° ì©ëì ëíŽ ììëŽ ëë€.
docs.microsoft.com
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ë°ìŽíž
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 íì ìŽëŠì ìë¡ ë°ê¿ ì¬ì©í ì ììµëë€. ì륌 ë€ìŽ ë€ì ì ìžì ëìŒí íìì ë³ì륌 ì ìží©ëë€.
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 ë° ìŽí ë²ì ìì ê°ë¥)
ë€ì ìœëììë ê° ìì 륌 ë³Žì¬ ì€ëë€.
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ìŒë¡ ë³íë ì ììµëë€.
byte a = 17;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
ìì ìì ìì 볌 ì ìë¯ìŽ 늬í°ëŽ ê°ìŽ ëì íìì ë²ì ëŽì ìì§ ììŒë©Ž 컎íìŒë¬ ì€ë¥ CS0031ìŽ ë°ìí©ëë€.
ìºì€ížë¥Œ ì¬ì©íì¬ ì ì 늬í°ëŽë¡ íìëë ê°ì ê²°ì ë 늬í°ëŽ íì ìŽìžì íììŒë¡ ë³íí ìë ììµëë€.
var signedByte = (sbyte)42;
var longVariable = (long)42;
ë³í
몚ë ì ì ì«ì íìì ë€ë¥ž ì ì ì«ì íììŒë¡ ë³íí ì ììµëë€. ëì íììŽ ìì€ íìì 몚ë ê°ì ì ì¥í ì ìë ê²œì° ë³íì ììì ì ëë€. ì ì¥í ì ìë 겜ì°ìë ìºì€íž ì륌 ì¬ì©íì¬ ëª ìì ë³íì ìííŽìŒ í©ëë€. ììží ëŽì©ì Ʞ볞 ì ê³µ ì«ì ë³íì ì°žì¡°íìžì.
C # ìžìŽì íìì value types _ ë° _ì°žì¡° íì*_ ìŽëŒë ë ê°ì§ 죌ì ë²ì£Œë¡ êµ¬ë¶ ë©ëë€. ê° íì곌 ì°žì¡° íìì 몚ë íë ìŽìì _ íì ë§€ê° ë³ì 륌 ì¬ì© íë _ì ë€ëŠ íììŒ* ì ììµëë€. íì ë§€ê° ë³ìë ê° íì곌 ì°žì¡° íìì 몚ë ì§ì í ì ììµëë€.
type
: value_type
| reference_type
| type_parameter
| type_unsafe
;
íì, í¬ìží°ì ìµì¢ ë²ì£Œë ìì íì§ ìì ìœë ììë§ ì¬ì©í ì ììµëë€. ìŽì ëíŽìë í¬ìží° íìì ììží ì€ëª ëìŽ ììµëë€.
ê° íìì íŽë¹ ë°ìŽí°ë¥Œ ì§ì í¬íš íë ë°ë©Ž, ì°žì¡° íìì ë³ìë ë°ìŽí°ì *ì°žì¡° _륌 ì ì¥ í ê³ , íìë _ *ê°ì²Ž* *ë¡ ìë €ì§ì ì°žì¡° íì곌 ë€ëŠ ëë€. ì°žì¡° íìì ì¬ì© íë ê²œì° ë ë³ìê° ê°ì ê°ì²Žë¥Œ ì°žì¡°í ì ììŒë¯ë¡ í ë³ìì ë í ìì ìŽ ë€ë¥ž ë³ììì ì°žì¡° íë ê°ì²Žì ìí¥ì ì€ ì ììµëë€. ê° íìì ì¬ì© íë ê²œì° ë³ììë ê°ê° ê³ ì í ë°ìŽí° ì¬ë³žìŽ ììŒë©° í ë³ìì ë í ìì ìŽ ë€ë¥ž ë³ìì ìí¥ì ì€ ì ììµëë€.
C #ì íì ìì€í ì 몚ë íìì ê°ì ê°ì²Žë¡ ì²ëŠ¬í ì ìëë¡ íµí© ëììµëë€. C#ì 몚ë íìì object íŽëì€ íììì ì§ì ëë ê°ì ì ìŒë¡ íìëê³ objectë 몚ë íìì Ʞ볞 íŽëì€ì ëë€. ì°žì¡° íìì ê°ì objectë¡ ìžìíšìŒë¡ìš ê°ëší ê°ì²Žë¡ ì²ëŠ¬ë©ëë€. ê° íìì ê°ì boxing ë° unboxing ìì (boxing ë° unboxing)ì ìí í ì¬ ê°ì²Žë¡ ì²ëŠ¬ ë©ëë€.
ê° íì
ê° íìì 구조첎 íì ëë ìŽê±°í íìì ëë€. C #ììë ëšì íì ìŽëŒë 믞늬 ì ì ë 구조첎 íìì ì§í©ì ì ê³µ í©ëë€. ëšì íìì ììœìŽë¥Œ íµíŽ ìë³ ë©ëë€.
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ìŒë¡ ìŽêž°í ë©ëë€.
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 ì ë€ì ë¬žìŽ íì© ë©ëë€.
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 ê²œì° íŒì ìì±ì ížì¶ì ëë€.
new T?(x)
ìì±ìŽ ìžì nullìŽ ìë ìžì€íŽì€ë¥Œ ë§ëëë€ T? Value x . ì§ì ë ê°ì ëíŽ nullì íì© íì§ ìë íìì ìžì€íŽì€ë¥Œ ë§ëë íë¡ìžì€ë¥Œ ëí ìŽëŒê³ í©ëë€.
ììì ë³íì null 늬í°ëŽìì T? (Null 늬í°ëŽ ë³í) ë°ìì T T? (ììì nullable ë³í)ë¡ ì¬ì©í ì ììµëë€.
ì°žì¡° íì
ì°žì¡° íìì íŽëì€ íì, ìží°íìŽì€ íì, ë°°ìŽ íì ëë ë늬ì íìì ëë€.
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 íŽëì€ ì ì¡Žì¬ë¥Œ ë°ê²¬ í ì¬ ì€ëª íë ê²ìŽ ê°ì¥ ì¢ìµëë€.
sealed class Box<T>: System.ValueType
{
T value;
public Box(T t) {
value = t;
}
}
ìŽì íìì ê°ì ë í Boxingì v T ìì ì€í new Box<T>(v) í ê³ ê²°ê³Œ ìžì€íŽì€ë¥Œ íìì ê°ìŒë¡ ë°í íë ê²ìŒë¡ êµ¬ì± ë©ëë€ object . ë°ëŒì 묞ìŽ
int i = 123;
object box = i;
ê°ë ì ìŒë¡ ë€ìì íŽë¹ í©ëë€.
int i = 123;
object box = new Box<int>(i);
ìì ê°ì boxing íŽëì€ë Box<T> ì€ì ë¡ ì¡Žì¬ íì§ ììŒë©° boxed ê°ì ëì íìì ì€ì ë¡ íŽëì€ íììŽ ìëëë€. ëì íìì boxed ê°ìë T ëì íììŽ ììŒë©° T ì°ì°ì륌 ì¬ì© íë ëì íì ê²ì¬ë is ëšìí íìì ì°žì¡°í ì ììµëë€ T . ìì :
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 . ì륌 ë€ìŽ ì ìžìŽ ì§ì ë 겜ì°
struct Point
{
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
ë€ì 묞
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 . ë°ëŒì 묞ìŽ
object box = 123;
int i = (int)box;
ê°ë ì ìŒë¡ ë€ìì íŽë¹ í©ëë€.
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 륌 íê° íë ê²œì° ì¬ë°ë¥ž ìì íì ë§€ê° ë³ìê° ìë ì ë€ëŠ íìë§ ê³ ë € ë©ëë€. ë°ëŒì íììŽ ë€ë¥ž íìì ë§€ê° ë³ì륌 ì¬ì© íë ê²œì° ëìŒí ìë³ì륌 ì¬ì© í ì¬ ìë¡ ë€ë¥ž íìì ìë³í ì ììµëë€. ìŽë ëìŒí íë¡ê·žëšìì ì ë€ëŠ ë° ë¹ ì ë€ëŠ íŽëì€ë¥Œ íŒí©í ë ì ì© í©ëë€.
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 ë íì ë§€ê° ë³ì륌 ì§ì ì§ì íì§ ìëëŒë ìì± ë íìì ìë³í ì ììµëë€. ìŽë ì ë€ëŠ íŽëì€ ì ìž ëŽìì íììŽ ì€ì²© ë ê³ í¬íš ì ìžì ìžì€íŽì€ íììŽ ìŽëŠ ì¡°íì ììì ìŒë¡ ì¬ì© ëë ê²œì° (ì ë€ëŠ íŽëì€ì ì€ì²© íì) ë°ìí ì ììµëë€.
class Outer<T>
{
public class Inner {...}
public Inner i; // Type of i is Outer<T>.Inner
}
ìì íì§ ìì ìœëììë ìì± ë íìì unmanaged_type (í¬ìží° íì)ë¡ ì¬ì©í ì ììµëë€.
íì ìžì
íì ìžì 목ë¡ì ê° ìžìë ëšìí íì ì ëë€.
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 .
class B<T> where T: IEnumerable {...}
class D<T>: B<T> where T: IEnumerable {...}
class E<T>: B<List<T>> {...}
íì ë§€ê° ë³ì
íì ë§€ê° ë³ìë ë°íìì ë§€ê° ë³ìê° ë°ìžë©ëë ê° íì ëë ì°žì¡° íìì ì§ì íë ìë³ìì ëë€.
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>> .
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 .
ìŽ ë늬ì륌 ížì¶ íë©Ž ì ížëŠ¬ë¡ íì ëë ìœëê° ì€í ë©ëë€. ë°ëŒì ìì ì ì륌 ì¬ì©í ê²œì° del곌 del2ë ëìŒ í ê³ ë€ì ë 묞ì ëìŒí 결곌륌 ë°ì ìí¬ ì ììµëë€.Func<int,int> del2 = exp.Compile();
ìŽ ìœë륌 ì€í í í ë°ìë i1 i2 몚ë ê°ìŽ 2 ììµëë€.int i1 = del(1); int i2 = del2(1);
- C#ë³µì¬
- C#ë³µì¬
'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 |