C# 14

C# 2019. 12. 9. 19:07

* 리플렉션


// 리플렉션은 객체의 형식 정보를 보는 기능이다.

// object는 모든 데이터의 조상이라 모든 데이터형은 object 형태를 가지고 있다.

// 그중 tostring()이나 gettype()이 있음


// 상속한 인터페이스, 필드, 프로퍼티, 메서드 정도 출력하는 방법을 알아봄


   class MainApp

    {


        static void interf(Type ty)

        {

            Console.WriteLine("---인터페이스---");

            Type[] ty2 = ty.GetInterfaces();


            foreach (Type i in ty2)

            {

                Console.WriteLine("이름:{0}",i.Name);

            }

            Console.WriteLine();

        }


        static void meth(Type ty)

        {

            Console.WriteLine("---메서드---");

            MethodInfo[] ty2 = ty.GetMethods();


            foreach (MethodInfo i in ty2)

            {

                Console.Write("이름:{0,-20} 리턴형:{1, -15} 파라미터:", i.Name, i.ReturnType.Name);


                ParameterInfo[] para = i.GetParameters();


                for (int j = 0; j < para.Length; j++)

                {

                    Console.Write("{0}", para[j].ParameterType.Name);

                    if (para.Length-1 > j)

                    {

                        Console.Write(", ");

                    }

                }

                Console.WriteLine();


            }

            Console.WriteLine();

        }


        static void prop(Type ty)

        {

            Console.WriteLine("---프로퍼티---");

            PropertyInfo[] ty2 = ty.GetProperties();


            foreach (PropertyInfo i in ty2)

            {

                Console.WriteLine("이름:{0} 타입:{1}", i.Name, i.PropertyType.Name);

            }

            Console.WriteLine();

        }


        static void Field(Type ty)

        {

            Console.WriteLine("---필드---");

            FieldInfo[] ty2 = ty.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);  // 어떤 한정자를 보여줄 지 선택하는거다. nonpublic은 protected와 private임


            foreach (FieldInfo i in ty2)

            {

                // i.IsPublic 한정자 구분

                Console.WriteLine("이름:{0, -20} 타입:{1}", i.Name,i.FieldType.Name);

            }

            Console.WriteLine();

        }


        static void Main(string[] args)

        {

            string a = "";


            Type ty = a.GetType(); // system.string


            interf(ty);

            meth(ty);

            prop(ty);

            Field(ty);

        }

    }



// gettype으로 선택된 string에 대한 리플렉션을 뽑은 것이다.

// 객체에 대한 정보를 알 수 있다.

'C#' 카테고리의 다른 글

C# 13  (0) 2019.12.09
C# 12  (0) 2019.12.09
C# 11  (0) 2019.12.09
C# 10  (0) 2019.12.09
C# 9  (0) 2019.12.09
블로그 이미지

ryancha9

https://blog.naver.com/7246lsy

,