dev

C# Detail

C# Detail

Wonny (워니)
Wonny (워니)·생성일 2022년 04월 12일 04:25·마지막 수정일 2022년 04월 12일 04:25

Types

Reference types

Built-in reference types

object type

  • .NET의 System.Object의 별칭
  • 모든 타입의 값을 object 타입의 변수에 할당할 수 있음
    • C#의 모든 타입(사전 정의된 타입, 사용자 정의 타입, 레퍼런스 타입, 값 타입 모두 포함)은 System.Object를 직간접적으로 상속하기 때문
  • object 변수는 리터럴 null를 사용해서 기본값으로 할당될 수 있음
  • 값 타입이 object 타입으로 변환되는 것을 'boxed'라고 하고, object 타입이 값 타입으로 변환되는 것을 'unboxed'라고 함

dynamic type

dynamic dynamicVariable = 1; object objectVariable = 1; dynamicVariable += 3; // 컴파일 에러 안뜸 objectVariable += 3; // 컴파일 에러 뜸 // 에디터에서 각 변수를 마우스 오버하면 dynamic과 object로 다르게 표시되는데 // 실행하면 둘 다 System.Int32 타입을 가짐 System.Console.WriteLine(dynamicVariable.GetType()); System.Console.WriteLine(dynamicVariable.GetType()); ExampleClass typedClass = new ExampleClass(); typedClass.exampleMethod("test"); // 컴파일 에러 뜸 dynamic dynamicClass = new ExampleClass(); dynamicClass.exampleMethod("test"); // 컴파일 에러 안뜸 internal class ExampleClass { public void exampleMethod() { Console.WriteLine("Done!"); } }
  • dynamic 타입을 사용하면 컴파일 타임 때 타입 검사를 하지 않고 런타임 때 처리함
  • non-null 표현식은 dynamic 타입으로 변환될 수 있음
  • 대부분 object 타입처럼 동작함
    • object 타입과 다른 점은 dynamic 타입 표현식이 포함된 연산은 컴파일러가 처리하거나 타입 검사를 하지 않음
  • dynamic 타입 변수는 object 타입 변수로 컴파일되고, 런타임에서 해당 연산이 처리될 때 올바른 타입으로 변환됨
© 2020 Wonny.