본문 바로가기
C#

[C#] as, is 연산자

by ifhead 2023. 5. 14.
반응형

공통점

  • 둘다 객체를 캐스팅 할 때 사용한다.

 

as 연산자

  • as 연산자는 객체를 특정 타입으로 캐스팅할 때 사용됩니다.
  • 캐스팅이 성공하면 해당 타입의 객체를 반환하고, 실패하면 null을 반환합니다.
  • 예외를 던지지 않기 때문에 예외 처리 코드를 작성할 필요가 없습니다.
Parent parent = new Parent();
Children child = parent as Children;

if (child != null)
{
    // child는 Children 타입으로 캐스팅되었으며, 이를 사용할 수 있습니다.
    child.ChildrenMethod();
}
else
{
    // parent는 Children 타입으로 캐스팅되지 않았습니다.
    Console.WriteLine("Casting failed.");
}

 

is 연산자

  • is 연산자는 객체가 특정 타입인지 확인할 때 사용됩니다.
  • is 연산자는 부울 값을 반환하며, 객체가 지정된 타입이면 true, 아니면 false를 반환합니다.
Parent parent = new Parent();

if (parent is Children)
{
    // parent는 Children 타입입니다.
    Children child = (Children)parent;
    child.ChildrenMethod();
}
else
{
    // parent는 Children 타입이 아닙니다.
    Console.WriteLine("parent is not a Children.");
}

 

as와 is를 함께 사용하는 좋은 방법

as와 is를 함께 사용하면 객체의 타입을 안전하게 확인하고 캐스팅할 수 있습니다. is 연산자로 타입을 먼저 확인하고, as 연산자로 안전하게 캐스팅하는 방법입니다.

is 연산자를 사용하여 객체의 타입을 먼저 확인하고, 타입이 맞으면 as 연산자로 안전하게 캐스팅합니다. 이렇게 하면 타입이 맞는지 확인하고, 캐스팅 실패로 인한 null 참조를 피할 수 있습니다.

using System;

class Parent
{
    public void ParentMethod()
    {
        Console.WriteLine("Parent method.");
    }
}

class Children : Parent
{
    public void ChildrenMethod()
    {
        Console.WriteLine("Children method.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Parent parent = new Parent();
        Parent parent2 = new Children();

        // parent 객체의 타입을 확인하고 안전하게 캐스팅
        if (parent is Children)
        {
            Children child1 = parent as Children;
            child1?.ChildrenMethod();  // 이 부분은 실행되지 않음 (parent는 실제로 Children 타입이 아니므로)
        }
        else
        {
            Console.WriteLine("parent is not a Children.");
        }

        // parent2 객체의 타입을 확인하고 안전하게 캐스팅
        if (parent2 is Children)
        {
            Children child2 = parent2 as Children;
            child2?.ChildrenMethod();  // 이 부분은 실행됨 (parent2는 실제로 Children 타입임)
        }
        else
        {
            Console.WriteLine("parent2 is not a Children.");
        }
    }
}

 

 

반응형

댓글