728x90

기반 클래스와 파생클래스 사이의 형 변환



안전한 형변환을 위한 is, as 연산자


is 연산자

객체가 해당형식에 해당하는지 검사하여, 결과를 bool값으로 반환

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TypeCasting
{
    class TestClass { }
    class Program
    {
        static void Main(string[] args)
        {
            Object obj=1004;
            Object obj2 = "천사";
            Console.WriteLine(" {0} is string -> {1}", obj, obj is string);
            Console.WriteLine(" {0} is string -> {1}", obj2, obj2 is string);
            Console.WriteLine("");
        }
    }
}

Output : 

 1004 is string -> False

 천사 is string -> True


계속하려면 아무 키나 누르십시오 . . .



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;

namespace TypeCasting
{
    class TestClass { }
    class Program
    {
        static void Main(string[] args)
        {
            Object obj = "This is string";

            if (obj is int)
                Console.WriteLine("obj는 string");
            else // else문이 없으면 화면에 아무것도 출력되지 않고 실행됨
                Console.WriteLine("obj는 string이 아님");
        }
    }
}

Output : 

obj는 string이 아님

계속하려면 아무 키나 누르십시오 . . .



as 연산자

형변환 연산과 다른 점은 변환이 가능하지 않는 경우 예외를 발생하지 않고 null이 반환됨.

               as 연산자는 오직 참조 형식에 대해서만 사용 가능


즉, as 연산자는 as 뒤에 나오는 타입이 아니면 null을 반환.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TypeCasting
{
    class Program
    {
        static void Main(string[] args)
        {
            object obj1= "alpha";
            object obj2 = 273;
            object obj3 = 52.273;

            string alpha = (string)obj1;
            string beta = (string)obj2;
            string gamma = (string)obj3;

            Console.WriteLine("alpha : " + alpha);
            Console.WriteLine("beta : " + beta);
            Console.WriteLine("gamma : " + gamma);
        }
    }
}

Output :

위와 같이 강제 형 변환을 하게 되면 처리되지 않은 예외가 뜨면서 프로그램이 종료된다.



아래는 as연산자를 쓴 소스이다.  변환이 가능하지않은 A는 null을 반환하게 된다.

using System;

namespace TypeCasting
{
    class Program
    {
        static void Main(string[] args)
        {
            object obj1 = 1004;
            object obj2 ="STRING!";

            string A = obj1 as string;
            string B = obj2 as string;

            Console.WriteLine("(string아니면 null) A: " + A);
            Console.WriteLine("(string아니면 null) B: " + B);
        }
    }
}

Output :

(string아니면 null) A:

(string아니면 null) B: STRING!

계속하려면 아무 키나 누르십시오 . . .

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

c# 복습  (0) 2017.03.31
headfirst c#-wpf  (0) 2016.11.19
5/27 업무일지 c#학생성적관리(콘솔)  (0) 2016.05.27
c# 스터디일지 -클래스  (0) 2016.05.22
2016-05-20-C#복습  (0) 2016.05.20

+ Recent posts