Section 34.2: 익명 (anonymous) 타입 생성하기

익명 (anonymous) 타입은 타입 이름이 주어지지 않기에, 이 타입의 변수들은 묵시적 타입 이름을 사용하게 된다 (var).

var anon = new { Foo = 1, Bar = 2 }; // anon.Foo == 1 // anon.Bar == 2

만약 멤버 변수의 이름이 별도로 기술되지 않는 경우에는, 해당 객체를 초기화시킬 때 사용되었던 속성 혹은 변수의 이름으로 설정된다.

int foo = 1; int bar = 2; var anon2 = new { foo, bar }; // anon2.foo == 1 // anon2.bar == 2

유의할 점은, 이러한 익명 타입 선언에 사용된 표현식이 속성 접근과 같이 단순한 경우에만 생략이 가능하다는 것이다; 메소드 호출이나 혹은 더 복잡한 표현식을 사용하고자 하는 경우에는, 속성의 이름을 별도로 기술해 주어야 한다.

string foo = "some string"; var anon3 = new { foo.Length }; // anon3.Length == 11 var anon4 = new { foo.Length <= 10 ? "short string" : "long string" }; // "Invalid anonymous type member declarator" 컴파일 에러가 발생한다. var anon5 = new { Description = foo.Length <= 10 ? "short string" : "long string" }; // 문제 없음
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 34.1: Anonymous 와 dynamic 타입 비교

Anonymous 타입은 미리 명시적으로 타입을 정의하지 않고도 객체를 생성할 수 있도록 해 주며, 이러한 경우에도 정적 (static) 타입 검사는 이루어지게 된다.

var anon = new { Value = 1 }; Console.WriteLine(anon.Id); // 컴파일 에러

반대로, dynamic 타입은 동적 (dynamic) 타입 검사를 하게 되는데, 이는 컴파일 에러 대신에 런타임 에러를 발생시키게 된다.

dynamic val = "foo"; Console.WriteLine(val.Id); // 컴파일은 되지만 런타임 에러를 throw 하게 된다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 33.1: 내장 (Built-In) 타입 테이블

아래 테이블은 C# 내장 타입들에 대한 키워드들을 보여주고 있는데, 이들은 System 네임스페이스에 존재하는 내장 타입들에 대한 별칭 (alias) 들이다.

C# 타입 .NET 프레임워크 타입
bool System.Boolean
byte System.Byte
sbyte System.SByte
char System.Char
decimal System.Decimal
double System.Double
float System.Single
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
object System.Object
short System.Int16
ushort System.UInt16
string System.String

C# 타입 키워드들과 그 별칭들은 서로 상호 교체 가능한다. 예를 들어, 아래 두가지 방식 모두 정수형 변수를 선언 가능하게 해 준다:

int number = 123; System.Int32 number = 123;
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.7: 값 타입 (Value type) - bool

// boolean 의 기본값은 false 이다 bool b; // nullable 한 boolean 의 기본값은 null 이다 bool? z; b = true; if (b) { Console.WriteLine("Boolean has true value"); }

bool 키워드는 System.Boolean 에 대한 별칭 (alias) 이다. 이는 Boolean 값인, truefalse 를 저장하기 위한 변수를 선언하기 위해 사용된다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.6: 값 타입 (Value type) - ushort, uint, ulong (부호가 없는 16 비트, 32 비트, 64 비트 정수들)

// 부호가 없는 short 가 표현할 수 있는 가장 작은 값을 할당한다 ushort s = 0; // 부호가 없는 short 가 표현할 수 있는 가장 큰 값을 할당한다 ushort s = 65535; // 부호가 없는 int 가 표현할 수 있는 가장 작은 값을 할당한다 uint i = 0; // 부호가 없는 int 가 표현할 수 있는 가장 큰 값을 할당한다 uint i = 4294967295; // 부호가 없는 long 이 표현할 수 있는 가장 작은 값을 할당한다 (예제에서는 숫자 마지막에 부호가 없는 long 값을 나타내는 접미어가 붙었음에 유의한다) ulong l = 0UL; // 부호가 없는 long 이 표현할 수 있는 가장 큰 값을 할당한다 (예제에서는 숫자 마지막에 부호가 없는 long 값을 나타내는 접미어가 붙었음에 유의한다) ulong l = 18446744073709551615UL;

또한 이런 타입들을 nullable 로 만들 수도 있는데, 이는 일반적인 값 할당 뿐만이 아니라 null 을 할당할수도 있다는 것을 의미한다. nullable 타입의 변수가 초기화되어 있지 않은 경우, 그 값은 0 이 아니라 null 을 나타낼 것이다. nullable 타입은 타입 이름 뒤에 물음표 (?) 를 붙여 표시한다.

int a; // 이 값은 0 이다 int? b; // 이 값은 null 이다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.5: 값 타입 (Value type) - short, int, long (부호가 있는 16 비트, 32 비트, 64 비트 정수들)

// 부호가 있는 short 가 표현할 수 있는 가장 작은 값을 할당한다 short s = -32768; // 부호가 있는 short 가 표현할 수 있는 가장 큰 값을 할당한다 short s = 32767; // 부호가 있는 int 가 표현할 수 있는 가장 작은 값을 할당한다 int i = -2147483648; // 부호가 있는 int 가 표현할 수 있는 가장 큰 값을 할당한다 int i = 2147483647; // 부호가 있는 long 이 표현할 수 있는 가장 작은 값을 할당한다 (예제에서는 숫자 마지막에 long 값을 나타내는 접미어가 붙었음에 유의한다) long l = -9223372036854775808L; // assigning a signed long to its maximum value (예제에서는 숫자 마지막에 long 값을 나타내는 접미어가 붙었음에 유의한다) long l = 9223372036854775807L;

또한 이런 타입들을 nullable 로 만들 수도 있는데, 이는 일반적인 값 할당 뿐만이 아니라 null 을 할당할수도 있다는 것을 의미한다. nullable 타입의 변수가 초기화되어 있지 않은 경우, 그 값은 0 이 아니라 null 을 나타낼 것이다. nullable 타입은 타입 이름 뒤에 물음표 (?) 를 붙여 표시한다.

int a; // 이 값은 0 이다 int? b; // 이 값은 null 이다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.4: 값 타입 (Value type) - char

// 단일 문자 s char c = 's'; // 정수값으로부터 변환 (cast) 된 문자 s char c = (char)115; // 단일 유니코드 문자 s char c = '\u0073'; // 유니코드 문자 : 웃는 얼굴 char c = '\u263a';
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.3: 불변 참조 타입 (Immutable reference type) - string

// 문자열 literal 로부터 새로운 string 을 할당한다 string s = "hello"; // 문자 배열로부터 새로운 string 을 할당한다 char[] chars = new char[] {'h', 'e', 'l', 'l', 'o'}; string s = new string(chars, 0, chars.Length); // 문자열의 char 포인터로부터 새로운 string 을 할당한다 string s; unsafe { fixed(char * charPointer = "hello") { s = new string(charPointer); } }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts