반응형
형변환
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 임"}");
반응형
'C#' 카테고리의 다른 글
C# 인덱서(Indexer) (0) | 2021.12.23 |
---|---|
C# 인터페이스(Interface)와 IDisposeable 구현 (0) | 2021.12.23 |
C# 클래스 상속과 오버라이드 그리고 추상화 (0) | 2021.12.23 |
C# Nullable타입과 Null 조건 연산자 그리고 ?? 연산자 (0) | 2021.12.22 |
C# 십진수를 이진수로 출력 (0) | 2021.12.21 |