Why does the type System.__ComObject claim (sometimes) to be public when
it is not?
Just an oddity I happened to discover when I was reflecting over all types
to check something else out of curiosity.
Why does the class System.__ComObject of the assembly mscorlib.dll
(sometimes?) claim to be public when in fact it seems to be non-public? If
I run the following code in a simple C# console application:
var t = Type.GetType("System.__ComObject");
Console.WriteLine(t.IsPublic); // "True" ?!
Console.WriteLine(t.IsVisible); // "False"
the output seems conflicting. A non-nested type (t.IsNested is false)
should give the same truth value for IsPublic and IsVisible. When I look
at the assembly with IL DASM I see:
.class private auto ansi beforefieldinit System.__ComObject
extends System.MarshalByRefObject
{
} // end of class System.__ComObject
which, to me, looks very much like a non-public class, something which
would correspond to the C# code below:
namespace System
{
// not public
internal class __ComObject : MarshalByRefObject
{
...
}
}
When I compare to another type which has a similar name, System.__Canon,
and similar IL modifiers, both IsPublic and IsVisible return false as
expected.
Does anyone know why (and when)
Type.GetType("System.__ComObject").IsPublic gives true?
No comments:
Post a Comment