작성날짜 : 2011-03-26 |
참고 : http://msdn.microsoft.com/ko-kr/library/cscsdfbt(VS.90).aspx
is 와 as
is
지정된 형식과 개체가 호환되는지 검사합니다. 예를 들어 다음 코드에서는 개체가 MyObject 형식의 인스턴스이거나 MyObject에서 파생된 형식인지 확인할 수 있습니다.
if (obj is MyObject) { } |
지정된 식이 null이 아니고 예외를 throw하지 않은 채 지정된 개체를 지정된 형식으로 캐스팅할 수 있는 경우 is 식은 true가 됩니다.
식이 항상 true이거나 항상 false인 것으로 알려져 있는 경우 is 키워드는 컴파일 타임 경고를 발생시키지만 런타임에는 일반적으로 형식 호환성을 확인합니다.
is 연산자는 오버로드되지 않습니다.
is 연산자는 참조 변환, boxing 변환 및 unboxing 변환만 고려하고 사용자 정의 변환 같은 다른 변환은 고려되지 않습니다.
무명 메서드는 is 연산자의 왼쪽에 사용할 수 없습니다. 이 예외에는 람다 식이 포함됩니다.
class Class1 { } class Class2 { } class Class3 : Class2 { }
class IsTest { static void Test(object o) { Class1 a; Class2 b;
if (o is Class1) { Console.WriteLine("o is Class1"); a = (Class1)o; // Do something with "a." } else if (o is Class2) { Console.WriteLine("o is Class2"); b = (Class2)o; // Do something with "b." }
else { Console.WriteLine("o is neither Class1 nor Class2."); } } static void Main() { Class1 c1 = new Class1(); Class2 c2 = new Class2(); Class3 c3 = new Class3(); Test(c1); Test(c2); Test(c3); Test("a string"); } } /* Output: o is Class1 o is Class2 o is Class2 o is neither Class1 nor Class2. */ |
as
연산자는 호환되는 참조 형식 간에 특정 형식의 변환을 수행하는 데 사용됩니다.
class csrefKeywordsOperators { class Base { public override string ToString() { return "Base"; } } class Derived : Base { }
class Program { static void Main() {
Derived d = new Derived();
Base b = d as Base; if (b != null) { Console.WriteLine(b.ToString()); }
} } } |
as 연산자는 캐스트 연산과 비슷합니다. 그러나 변환이 불가능한 경우 as는 예외를 발생시키는 대신 null을 반환합니다.
expression as type |
이 예제는 expression이 한 번만 계산된다는 점을 제외하고는 다음 식과 같습니다.
expression is type ? (type)expression : (type)null |
as 연산자는 오직 참조 변환과 boxing 변환만을 수행합니다. as 연산자는 사용자 정의 변환과 같은 다른 변환을 수행할 수 없습니다. 사용자 정의 변환은 이 연산자 대신 캐스트 식을 사용하여 수행해야 합니다.
class ClassA { } class ClassB { }
class MainClass { static void Main() { object[] objArray = new object[6]; objArray[0] = new ClassA(); objArray[1] = new ClassB(); objArray[2] = "hello"; objArray[3] = 123; objArray[4] = 123.4; objArray[5] = null;
for (int i = 0; i < objArray.Length; ++i) { string s = objArray[i] as string; Console.Write("{0}:", i); if (s != null) { Console.WriteLine("'" + s + "'"); } else { Console.WriteLine("not a string"); } } } } /* Output: 0:not a string 1:not a string 2:'hello' 3:not a string 4:not a string 5:not a string */ |
'Programming > .NET' 카테고리의 다른 글
[.NET] 인터페이스 대신 대리자를 사용해야 하는 경우 (0) | 2015.05.19 |
---|---|
[.NET] Delegate (대리자) (0) | 2015.05.19 |
[.NET] 다형성 (0) | 2015.05.19 |
[.NET] String (0) | 2015.05.19 |
[.NET] Array (배열) (0) | 2015.05.19 |