Per Reflection internal classes instanzieren?

27/03/2008 - 18:03 von Nicolas Pavlidis | Report spam
Hi!

Ich tu hier grad damit beschàftigen wie ich Typen aus Assemblies
instanzieren kann von denen ich nur den Filename kenne, dabei ist mir
folgedes aufgefallen:

Wenn ich in einer Lib eine Klasse internal mache, kann ich die scheinbar
über reflection problemlos instanzieren, was bei mir nun die Frage
aufwirft, ist internal für den CLR - Code eigentlich public und das
ganze wird nur vom C# - Compiler überprüft, und der laufzeit ist es
ziehmlich egal ob was internal ist oder nicht?

Ist vielleicht eine komische Frage, aber anders kann ich mir das
Verhalten nnicht erkláren.

Danke && LG
Nicolas
 

Lesen sie die antworten

#1 Frank Dzaebel
27/03/2008 - 20:41 | Warnen spam
Hallo Nicolas,

Wenn ich in einer Lib eine Klasse internal mache, kann ich die scheinbar
über reflection problemlos instanzieren, was bei mir nun die Frage
aufwirft, ist internal für den CLR - Code eigentlich public und das
ganze wird nur vom C# - Compiler überprüft, und der laufzeit ist es
ziehmlich egal ob was internal ist oder nicht?



"internal" ist genau das, was in der Doku dazu steht.
Es ist dokumentiert, dass man über Reflection ohne
zusàtzliche Berechtigung auf internal-Member in
der Assembly des aufrufenden Codes zugreifen kann.
(In Reflektion wird dies als Zugriff auf Assemblyebene
bezeichnet.)
Damit Code einen beliebigen nicht öffentlichen Member
aufrufen kann, benötigt man aber schon eine
ReflectionPermission mit dem ReflectionPermissionFlag.
MemberAccess-Flag.
Die dokumentierten Berechtigungen werden da
schon CLR geprüft und auch ggf. verweigert.
Reflection ist kein sauberer OOP Zugriff.
Du kannst ja sogar ggf. auf *private* Felder von außen
zugreifen, was für OOP-Zugriff ansich tabu ist, nur Reflection
ist eben für Szenarien, in denen diese Typen/Member aus
anderen Gründen interessieren.
Reflection normal eher vermeiden, allein schon aus
Performancegründen. Nur eben in Szenarien wie:

[Übersicht über Reflektion]
http://msdn2.microsoft.com/de-de/li...kdhsy.aspx

u.a. sinnvoll.

[Sicherheitsaspekte bei der Reflektionsausgabe]
http://msdn2.microsoft.com/de-de/li...ytdak.aspx

[Sicherheitsüberlegungen für die Reflektion]
http://msdn2.microsoft.com/de-de/li...y7tfc.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen