internal TypeInfo(Type typeOfObj)
{
ServerType = GetQualifiedTypeName(typeOfObj);
// Compute the length of the server hierarchy
Type currType = typeOfObj.BaseType;
// typeOfObj is the root of all classes, but not included in the hierarachy.
Message.DebugOut("RemotingServices::TypeInfo: Determining length of server heirarchy\n");
int hierarchyLen = 0;
while ((currType != typeof(MarshalByRefObject)) &&
(currType != null))
{
currType = currType.BaseType;
hierarchyLen++;
}
// Allocate an array big enough to store the hierarchy
Message.DebugOut("RemotingServices::TypeInfo: Determined length of server heirarchy\n");
String[] serverHierarchy = null;
if (hierarchyLen > 0)
{
serverHierarchy = new String[hierarchyLen];
currType = typeOfObj.BaseType;
for (int i = 0; i < hierarchyLen; i++)
{
serverHierarchy[i] = GetQualifiedTypeName(currType);
currType = currType.BaseType;
}
}
this.ServerHierarchy = serverHierarchy;
Message.DebugOut("RemotingServices::TypeInfo: Getting implemented interfaces\n");
// Set the interfaces implemented
Type[] interfaces = typeOfObj.GetInterfaces();
String[] interfaceNames = null;
// If the requested type itself is an interface we should add that to the
// interfaces list as well
bool isInterface = typeOfObj.IsInterface;
if (interfaces.Length > 0 || isInterface)
{
interfaceNames = new String[interfaces.Length + (isInterface ? 1 : 0)];
for (int i = 0; i < interfaces.Length; i++)
{
interfaceNames[i] = GetQualifiedTypeName(interfaces[i]);
}
if (isInterface)
interfaceNames[interfaceNames.Length - 1] = GetQualifiedTypeName(typeOfObj);
}
this.InterfacesImplemented = interfaceNames;
} // TypeInfo