Dziwnie zdarzyło mi się odkryć, kiedy zastanawiałem się nad wszystkimi typami, aby sprawdzić coś innego z ciekawości.Dlaczego typ System .__ ComObject roszczenie (czasami) być publiczne, gdy nie jest?
Dlaczego klasa System.__ComObject
z zespołu mscorlib.dll
(czasami?) Twierdzi, że jest publiczna, gdy w rzeczywistości wydaje się być niepubliczna? Jeśli uruchomię następujący kod w prostej aplikacji konsoli C#:
var t = Type.GetType("System.__ComObject");
Console.WriteLine(t.IsPublic); // "True" ?!
Console.WriteLine(t.IsVisible); // "False"
wyjście wydaje się być w konflikcie. Typ niezgnieżdżony (t.IsNested
jest fałszywy) powinien dawać tę samą wartość prawdy dla IsPublic
i IsVisible
. Kiedy patrzę na zespole z IL DASM
widzę:
.class private auto ansi beforefieldinit System.__ComObject
extends System.MarshalByRefObject
{
} // end of class System.__ComObject
który dla mnie wygląda bardzo podobnie jak niepublicznej klasie, coś, co odpowiadałoby kodu C# poniżej:
namespace System
{
// not public
internal class __ComObject : MarshalByRefObject
{
...
}
}
Po porównaniu z innym typem, który ma podobną nazwę, System.__Canon
i podobne modyfikatory IL, oba IsPublic
i IsVisible
zwrócą fałsz zgodnie z oczekiwaniami.
Czy ktoś wie, dlaczego (i kiedy) Type.GetType("System.__ComObject").IsPublic
daje prawdziwe?
System .__ ComObject i System .__ Canon są bardzo różne - pierwszy to obiekt COM (IsCOMObject == true) - dlatego uważam, że jest to Public, a drugi nie. –
@Mihail Jeśli używam 'var t = typeof (Uri) .Assembly.GetType (" System.Net.Mail.MSAdminBase ");' Mam innego typu 't', który również' IsCOMObject', ale 'IsNotPublic'. Wydaje się to być "kontrprzykładem" do tego wyjaśnienia, chyba że jest to coś, co zależy od złożenia ('System.Net.Mail.MSAdminBase' jest w innym zestawie, w porównaniu do' System .__ ComObject'). –
Wszystko, co mogę zrozumieć, to może być wada! Natknąłem się na podobne rzeczy, być może wy też się natknęliście. Kliknij [link] (http://microsoft.public.dotnet.framework.interop.narkive.com/06Y4MWuX/reflection-messing-up-the-type-hierarchy) – Nilesh