본문 바로가기

C#

C# 클래스 형변환과 is, as

반응형

형변환

class Animal
{
    protected string name;
    public Animal(string name) { this.name = name; }
    public virtual string GetName() { return name; }
}

class Dog : Animal
{
    public Dog(string name) : base(name) { }
    public override string GetName() { return $"강아지 이름: {name}"; }
}

 

Dog dog = new Dog();
Animal animal = (Dog)dog; // 명시적 형변환 가능
Animal animal = dog; // 암시적 형변환 가능

Animal animalDog = new Dog("dog");
Dog dog = (Dog)animalDog; // 명시적 형변환 가능
Dog dog = animalDog; // 암시적 형변환 불가능

Animal animal = new Animal();
Dog dog = (Animal)animal; // 불가능

 

 


is

  • 객체가 특정 클래스 타입이나 인터페이스를 가지고 있는지 확인 및 사용
Animal animalDog = new Dog("dog");
Console.WriteLine($"{animalDog is Dog}");
Console.WriteLine($"{animalDog is not null}");
Console.WriteLine($"{animalDog is null}");
if (animalDog is Dog dog) { Console.WriteLine(dog.GetName()); }

 


as

  • 형변환에 성공하면 해당 클래스 타입으로 캐스팅하고, 변환에 실패하면 null 리턴
Animal animalDog = new Dog("dog");
Console.WriteLine($"{(animalDog as Dog)?.GetName()}");

Animal animalCat = new Cat("cat");
Console.WriteLine($"{(animalCat as Dog)?.GetName() ?? "null 임"}");

 

반응형