Object Info

클래스의 오브젝트 정보를 표시해보자.


클래스와 오브젝트가 같은 타입인지 확인 할려면 GetType과 typeof를 사용한다.

Human human = new Human("hebory", 30, 1);

if (human.GetType() == typeof(Human))
{
    Debug.WriteLine("human and Human is equal");   
}

오브젝트의 멤버를 얻어온다.  매개변수로 멤버의 권한을 줄수 있다.
여기서 멤버는 멤버변수, 함수등을 모두 포함하고 있다.

Object obj;
//모든 데이터의 멤버를 얻어온다.
MemberInfo[] memberList = obj.GetType().GetMembers(BindingFlags.NonPublic | BindingFlags.Public  | BindingFlags.Instance);
//public 데이터의 멤버만 얻어온다.
MemberInfo[] memberList = obj.GetType().GetMembers();

MemberInfo에서 MemberTypes.Field는 멤버변수를 나타낸다.

foreach (MemberInfo m in memberList)
{
    if (m.MemberType == MemberTypes.Field)
    {
        FieldInfo fieldInfo = (FieldInfo)m;
        Type type = fieldInfo.FieldType;
    }
}

FieldInfo의 type으로 구조체인지 확인하는것은 다음과 같다.
int, bool, float등은 IsPrimitive 타입이다.

private static bool IsStruct(Type type)
{
    return (type.IsValueType && !type.IsEnum && !type.IsPrimitive);
}


FieldInfo의 type으로 클래스인지 확인하는것은 다음과 같다.
string 타입은 IsPrimitive가 아니라 클래스 타입이므로 별도로 처리한다.

private static bool IsClass(Type type)
{
    bool isStringtype = (type.ToString() == "System.String") ? true : false;

    if (isStringtype == false && type.IsClass)
        return true;
    else
        return false;
}

FieldInfo의 type으로 배열인지 확인하는것은 다음과 같다.

private static bool IsArray(Type type)
{
    return type.IsArray;
}

object가 배열일때 타입은 다음과 같이 구한다.

object obj;

for (int n = 0; n < ((Array)obj).Length; n++)
{
    object retObj = ((Array)obj).GetValue(n);
    Type type = retObj.GetType();
    //타입 처리
}

소스 : ObjectInfo.cs

참조)
c# memberinfo Field
http://stackoverflow.com/questions/12680341/how-to-get-both-fields-and-properties-in-single-call-via-reflection
https://msdn.microsoft.com/ko-kr/library/system.reflection.fieldinfo(v=vs.110).aspx
http://www1.cs.columbia.edu/~lok/csharp/refdocs/System.Reflection/types/MemberInfo.html
http://stackoverflow.com/questions/1827425/how-to-check-programatically-if-a-type-is-a-struct-or-a-class
https://msdn.microsoft.com/ko-kr/library/szasx730.aspx

object가 배열일때 array 참조
https://delog.wordpress.com/2010/09/09/check-if-c-object-is-an-array-and-iterate-it/