블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

05-13 00:57

Recent Post

Recent Comment

Recent Trackback

Archive

2015. 5. 19. 11:30 Programming/.NET

작성날짜    : 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
posted by Kanais