Solo una stranezza mi è capitato di scoprire quando stavo riflettendo su tutti i tipi per controllare qualcos'altro per curiosità.Perché il tipo System .__ ComObject dichiara (a volte) di essere pubblico quando non lo è?
Perché la classe dell'assembly mscorlib.dll
(a volte?) Dichiara di essere pubblica quando in realtà sembra non essere pubblica? Se eseguo il codice seguente in una semplice applicazione console C#:
var t = Type.GetType("System.__ComObject");
Console.WriteLine(t.IsPublic); // "True" ?!
Console.WriteLine(t.IsVisible); // "False"
l'output sembra in conflitto. Un tipo non annidato (t.IsNested
è falso) dovrebbe fornire lo stesso valore di verità per IsPublic
e IsVisible
. Quando guardo il montaggio con IL DASM
vedo:
.class private auto ansi beforefieldinit System.__ComObject
extends System.MarshalByRefObject
{
} // end of class System.__ComObject
che, a me, sembra molto simile a un classe non-pubblico , qualcosa che corrisponderebbe al C# codice qui sotto:
namespace System
{
// not public
internal class __ComObject : MarshalByRefObject
{
...
}
}
Quando eseguo il confronto con un altro tipo che ha un nome simile, System.__Canon
, e modificatori IL simili, sia IsPublic
sia IsVisible
restituiscono false come previsto.
Qualcuno sa perché (e quando) Type.GetType("System.__ComObject").IsPublic
dà vero?
System .__ ComObject e System .__ Canon sono molto diversi: prima è un oggetto COM (IsCOMObject == true) - è per questo che penso che sia Pubblico e il secondo no. –
@Mihail Se uso 'var t = typeof (Uri) .Assembly.GetType (" System.Net.Mail.MSAdminBase ");' Ho un altro tipo 't' che anche' IsCOMObject', ma 'IsNotPublic'. Questo sembra essere un "controesempio" a questa spiegazione, a meno che non si tratti di qualcosa che dipende dall'assemblaggio ('System.Net.Mail.MSAdminBase' si trova in un altro assembly, rispetto a' System .__ ComObject'). –
Tutto quello che riesco a capire è che potrebbe essere un difetto! Mi sono imbattuto in qualcosa di simile, forse anche voi vi siete imbattuti nello stesso modo. Segui [collegamento] (http://microsoft.public.dotnet.framework.interop.narkive.com/06Y4MWuX/reflection-messing-up-the-type-hierarchy) – Nilesh