|
개인 결과물 보고서 |
조 : 3조 |
작성자 : 황광진 | |
작성일 : 2010년 11월 2일 |
[타입의 기본]
internal class Employee{ …. } internal class Manager : Employee{ … } class Program { static void Main(string[] args) { Manager m = new Manager(); PrometeEmployee(m);
DateTime newYears = new DateTime(2010, 11, 2); PrometeEmployee(newYears); } private static void PrometeEmployee(Object m) { Employee e = (Employee)m; } } |
위와 같은 코드가 있다.
Manager는 Employee 클래스를 상속받은 클래스이기 때문에 위와 같은 코드로 형변환이 되는 것을 C#에서는 허용하지만 DateTime메서드 같은 경우 DateTime은 object 객체로부터 상속을 받았기 때문에 컴파일러는 아무 문제 없이 PrometeEmployee를 호출한다. 하지만 PrometeEmployee 메서드 내부적으로 m이 Employee 또는 Employee 객체로부터 상속받은 타입이 아닌 DateTime 객체를 참조하고 있음을 발견한다. 이 때 System.InvalidCastException을 발생시킨다.
l AS 연산자
Object o = new object(); Employee e = o as Employee;
e.ToString();
|
as 연산자는 타입 변환 시 예외를 발생시키지는 않는다. 만일 객체가 변환할 수 없다면 null이 결과로 반환된다. 따라서 참조 결과 값을 사용하기 전에 결과가 null인지 확인할 필요가 있다.
l 네임스페이스와 어셈블리의 연관성
네임스페이스와 어셈블리(타입을 구현한 파일)는 서로 다른 다중의 어셈블리에서 구현되었을 수도 있다. 예를 들어, System.IO.Filestream 타입은 MSCorLib.dll 어셈블리에 구현되어 있고, System.IO.FileSystemWactcher 타입은 System.dll 어셈블리에 구현되어 있다.
하나의 어셈블리에는 여러 네임스페이스가 포함될 수 있으며, 각각의 네임스페이스에는 다양한 타입들이 포함 될 수 있다. 예를 들어, System.Int32와 System.Text.StringBuilder 타입은 MSCorLib.dll 어셈블리 안에 정의 되어 있다.