I'm a bit boggled by something, I hope the CLR gearheads can help. Apparently my gears aren't big enough.
I have a reflector utility that generates assembly stubs for Cola for .NET, and I find classes have methods that only differ by a modifier, such as virtual. Example below, from Oracle.DataAccess.dll, method GetType():
class OracleTypeException : System.SystemException {
virtual string ToString ();
virtual System.Exception GetBaseException ();
virtual void set_Source (string value);
virtual void GetObjectData (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
virtual System.Type GetType (); // DeclaringType Exception
virtual bool Equals (object obj);
virtual int32 GetHashCode ();
System.Type GetType (); // DeclaringType Object
}
What is this?
I have not been able to reproduce this with C# and it causes trouble for Cola as it thinks GetType() is a redefinition, since the signature is identical.
My method reflector starts like this:
static void DisplayMethod(MethodInfo m)
{
if (
// Filter out things Cola cannot yet import, like generics, pointers, etc.
m.IsGenericMethodDefinition || m.ContainsGenericParameters || m.ReturnType.IsGenericType
|| !m.ReturnType.IsPublic
|| m.ReturnType.IsPointer || m.ReturnType.IsByRef
|| m.ReturnType.IsMarshalByRef
|| m.ReturnType.IsImport
)
return;
// generate stub signature
// [snipped]
}
SOLVED: non-virtual GetType() comes from System.Object. The deriving class shadowed System.Object.GetType() with a virtual method.