dev
C# Detail
C# Detail
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
타입 변수로 컴파일되고, 런타임에서 해당 연산이 처리될 때 올바른 타입으로 변환됨