Nur eine Kuriosität, die ich entdeckte, als ich über alle Typen nachdachte, um etwas anderes aus Neugier zu überprüfen.Warum behauptet der Typ System .__ ComObject (manchmal), öffentlich zu sein, wenn es nicht ist?
Warum behauptet die Klasse System.__ComObject
der Baugruppe mscorlib.dll
(manchmal?), Öffentlich zu sein, obwohl sie in der Tat nicht öffentlich zu sein scheint? Wenn ich den folgenden Code in einer einfachen C# -Konsolenanwendung ausführen:
scheint die Ausgabe widersprüchlich. Ein nicht verschachtelter Typ (t.IsNested
ist falsch) sollte den gleichen Wahrheitswert für IsPublic
und IsVisible
ergeben. Als ich bei der Montage mit IL DASM
sehe ich sehen:
.class private auto ansi beforefieldinit System.__ComObject
extends System.MarshalByRefObject
{
} // end of class System.__ComObject
was, mir, sieht sehr ähnlich wie eine nicht-öffentliche Klasse, etwas, das mit dem C# -Code entsprechen würde unter:
namespace System
{
// not public
internal class __ComObject : MarshalByRefObject
{
...
}
}
Wenn ich mit einem anderen Typ mit ähnlichem Namen, System.__Canon
, und ähnlichen IL-Modifikatoren vergleiche, geben sowohl IsPublic
als auch IsVisible
false wie erwartet zurück.
Weiß jemand, warum (und wann) Type.GetType("System.__ComObject").IsPublic
gibt wahr?
System .__ ComObject und System .__ Canon sind sehr unterschiedlich - zuerst ist COM-Objekt (IsCOMObject == true) - das ist, warum ich denke, es ist öffentlich und die zweite nicht. –
@Mihail Wenn ich 'var t = typeof (Uri) .Assembly.GetType (" System.Net.Mail.MSAdminBase ") verwende;' Ich habe einen anderen Typ 't', der auch' IsCOMObject', aber 'IsNotPublic' ist. Dies scheint also ein "Gegenbeispiel" zu dieser Erklärung zu sein, es sei denn, dies ist etwas, das von der Assembly abhängt ("System.Net.Mail.MSAdminBase" befindet sich in einer anderen Assembly, verglichen mit "System .__ ComObject"). –
Alles was ich herausfinden kann ist, das könnte ein Defekt sein! Ich bin auf ähnliche Dinge gestoßen, vielleicht seid ihr auch auf dasselbe gestoßen. Folgen Sie [link] (http://microsoft.public.dotnet.framework.interop.narkive.com/06Y4MWuX/reflection-messing-up-the-type-hierarchy) – Nilesh