티스토리 뷰

is 와 as 키워드와 비슷한 기능을 하는 것을 JAVA로 말한다면 instanceof키워드를 들 수 있다.


is - 참조변수와 인스턴스를 비교해 형변환이 가능하다면 true 형변환이 불가하다면 false를 반환.

as - 참조변수와 인스턴스를 비교해 형변환이 가능하다면 해당 인스턴스를 반환 아니라면 null을 반환



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

namespace ObjectApplication { class TestParent { internal int no; internal TestParent(int no) { this.no = no; } } class Test : TestParent { public String data="Test"; public Test() : base(100) {} public override String ToString() { return "오버라이딩한거임"; } } class Program { static void Main(string[] args) { TestParent tp = new Test(); Test t = null; if (tp is Test) { Console.WriteLine("참조변수 tp는 Test로 형변환이 가능합니다."); t = (Test)tp; } Console.WriteLine(t.no); Test asTest = tp as Test; Console.WriteLine(asTest.GetType()); TestParent tParent = new TestParent(1000); Console.WriteLine(tParent is Test); } } }

-결과-


TestParent(부모) 클래스와 Test(자식)클래스가 있다. 둘은 상속관계에 있다.


37라인에서 부모 클래스의 참조변수가 자식 클래스의 인스턴스를 참조하고 있다.(이러한 것을 다형성이라 한다.)


39라인에서는 tp is Test를 쓰고있으며 형변환이 가능한지를 판별하고 있다.

결과는 true로 if문의 문장이 수행된다.

tp is Test를 쉽게 풀어서 설명하면 Test클래스 타입의 참조변수를 선언하면 이 참조변수가 tp가 가리키고 있는 인스턴스를 참조가 가능한가? 로 풀어서 말할 수 있다..


46라인에서는 is키워드 대신에 as키워드를 사용하고 있는데.... 앞서 말한 tp is Test에서 형변환이 가능했으니 as키워드도 형변환이 가능하다. 참조변수 tp의 인스턴스인 Test()를 asTest참조변수가 참조하게 된다.


50라인의 is키워드는 False가 나오는데

부모의 인스턴스를 자손의 참조변수가 참조할 수 있다. 그 이유는 부모의 멤버는 자손이 가질 수 있는데 자손의 멤버는 부모가 가질 수 없기 때문이다. 그렇기 때문에 형변환도 불가능 하다


TestParent tp = new TestParent();

Test t = (Test)tp;

이런식으로 명시적인 형변환 구문을 사용해서 코딩을 하게되면 컴파일은 되지만 실행단계에서 오류가 발생하게 된다.

'C#' 카테고리의 다른 글

연산자 오버로딩 operator , 클래스간 형변환  (0) 2016.01.28
모든 타입의 조상 System.Object  (1) 2016.01.22
상속(inherit)  (0) 2016.01.16
?? 키워드와 goto문  (0) 2015.05.29
깊은 복사, 얕은 복사, ref, out 예약어  (0) 2014.12.28
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday