is 연산자
객체가 특정 형식이나 해당 형식의 파생 형식인지 확인하는데 사용한다.
E is T
E : 값을 반환하는 식
T : 형식 또는 매개변수의 이름
is 연산자의 true 조건
01 객체가 해당 형식의 인스턴스인 경우
02 객체가 해당 형식의 파생 형식의 인스턴스인 경우
Code 예시
object obj = 3;
object obj1 = "Pig";
if (obj is int || obj1 is int)
{
Console.WriteLine($"obj is int {obj}");
}
if (obj is string || obj1 is string)
{
Console.WriteLine($"obj is string {obj1}");
}
class Pig
{
public virtual void Eat()
{
Console.WriteLine("Pig is eating");
}
}
class PinkPig : Pig
{
public override void Eat()
{
Console.WriteLine("PinkPig is eating");
}
}
class Program
{
static void Main(string[] args)
{
Pig pig = new PinkPig();
if (pig is PinkPig)
{
pig.Eat();
}
}
}
과정
1. Pig pig = new PinkPig(); : PinkPig클래스의 인스턴스를 생성하여 pig변수에 할당한다. 이때 pig변수는 Pig 형식이지만 PinkPig클래스의 인스턴스를 참조한다.
다형성 알아보러 가기
2. if (pig is PinkPig) : is연산자롤 통해서 pig변수가 PinkPig 형식의 인스턴스인지 확인한다.
3. Pinkpig형식의 멤버인 Eat()을 호출한다.
as 연산자
객체를 지정된 형식으로 변환한다.
E as T
E : 값을 반환하는 식
T : 형식 또는 매개변수의 이름
반환
변환이 성공한 경우 변환된 객체, 실패한 경우 null
Code 예시
class Pig
{
public void Eat()
{
Console.WriteLine("Pig is eating");
}
}
class PinkPig : Pig
{
public void Jump()
{
Console.WriteLine("PinkPig is jumping");
}
}
class Program
{
static void Main(string[] args)
{
Pig pig = new Pig();
// pig가 Pinkpig 타입인지 확인 한 후 아니면 null값이 return
PinkPig pinkPig = pig as PinkPig;
if (pinkPig != null)
{
pinkPig.Jump();
}
else
{
Console.WriteLine("null");
}
}
}
결과가 null이 나오는 이유
pig 변수는 Pig형식의 인스턴스를 참조한다.
PinkPig pinkPig = pig as PinkPig;을 통해서 pig변수를 PinkPig형식으로 형변환을 하려고 한다. 이때 pig는 PinkPig형식의 인스턴스가 아닌 경우 pinkPig에는 null이 할당된다.
class Pig
{
public void Eat()
{
Console.WriteLine("Pig is eating");
}
}
class PinkPig : Pig
{
public void Jump()
{
Console.WriteLine("PinkPig is jumping");
}
}
class Program
{
static void Main(string[] args)
{
Pig pig = new PinkPig();
// pig가 Pinkpig 타입인지 확인 한 후 아니면 null값이 return
PinkPig pinkPig = pig as PinkPig;
if (pinkPig != null)
{
pinkPig.Jump();
}
else
{
Console.WriteLine("null");
}
}
}
PinkPig pinkPig = pig as PinkPig;을 통해서 pig변수를 PinkPig형식으로 형변환을 하려고 한다. 이때 pig는 PinkPig형식의 인스턴스 이므로 pinkPig에는 true가 할당된다.
typeof
컴파일 시간에 형식을 분석하여 형식의 메타데이터(형식의 이름, 멤버의 정보, 속성 등)를 가져올때 사용한다.
Type intType = typeof(형식명);
반환
System.Type 개체
Code 예시
using System;
using System.Collections.Generic;
namespace pig
{
class Pig
{
public int Weight { get; set; }
public int Age { get; set; }
public void Eat()
{
Console.WriteLine("Pig is eating");
}
}
class Program
{
static void Main(string[] args)
{
Type type = typeof(Pig);
Console.WriteLine($"Type Name : {type.Name}");
Console.WriteLine($"Type NameSpace : {type.Namespace}");
Console.WriteLine("Properties:");
foreach (var property in type.GetProperties())
{
Console.WriteLine($"- {property.Name}");
}
Console.WriteLine("Methods:");
foreach (var method in type.GetMethods())
{
Console.WriteLine($"- {method.Name}");
}
}
}
}
01 Name
형식의 이름을 String 값으로 가져온다.
02 Namespace
형식이 속한 네임스페이스를 String값으로 가져온다.
03 GetProperties()
현재 Type의 모든 Property 을 반환
public System.Reflection.PropertyInfo[] GetProperties ();
반환
PropertyInfo[] 배열
04 GetMethods()
현재 Type의 모든 public 메서드를 반환
public System.Reflection.MethodInfo[] GetMethods ();
'유니티 공부 > C# 문법' 카테고리의 다른 글
C# - ArraySegment<T> Struct (0) | 2023.07.19 |
---|---|
C# 문법 - Tuple<T1,T2> (0) | 2023.06.14 |
C# 문법 - 상속에서 override vs new (0) | 2023.05.09 |
C# 문법 - enum(열거형) (0) | 2023.05.09 |
C# 문법 - Nullable type (0) | 2023.04.20 |
댓글