Hallo,
Ich habe festgestellt das man das Browsable Attribut auf Interface Membern
wohl nicht verwenden kann. Bei folgendem Sample Code wird mir das Property
Visible beim Verwenden in einem anderen Assembly trotzdem angezeigt.
interface MyInterface
{
[Browsable(false)]
bool Visible { get; }
}
class MyClass : MyInterface
{
[Browsable(false)]
public Visbible
{
get
{
return true;
}
}
}
Mache ich was falsch ?
Hallo Sebastian.Lange,
du meinst wohl das EditorBrowsable-Attribut, oder? Laut MSDN ist das Browsable-Attribut auch auf Properties anwendbar - das ist aber nicht der Fall, wenn ich dich nicht falsch verstanden habe.
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Hallo Sebastian.Lange,
ich verstehe nicht, was du meinst. Beides sind unterschiedliche Attribute. Wenn du ein Property im IntelliSense verstecken möchtest, dann verwende das EditorBrowsable-Attribut. Wenn du eine Propertie im Property-Fenster verstecken möchtest, verwende das Browsable-Attribut.
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Hallo Sebastian.Lange,
mal abgesehen davon, dass das EditorBrowsableAttribut sowieso nicht so ganz zur Objektorientierungen passt (Vererbung bedeutet Spezialisierung im Sinne von Erweiterung, nicht im Sinne von Einschränkung/Ausblenden, siehe Liskovsches Substitutionsprinzip), kommt es mir besonders fragwürdig vor, das EditorBrowsableAttribut auf eine Property eines Interfaces anzuwenden, weil ein Interface ja gerade definiert, was alle Klassen, die das Interface implementieren, zur Verfügung stellen müssen.
herbivore
Hallo herbivore,
Also mein Szenario sieht so aus das ich eine Komponente MyLibrary.Core habe
die Klassen anbietet von der mehrere andere Komponten MyLibrary.A , MyLibrary.B Klassen ableiten. Diese Assemblies liefere ich so aus.
Entwickler die MyLibrary.A oder MyLibrary.B benutzen sollen durch die geerbten
Readonly Properties aus .Core im Intellisense nicht unnötig verwirrt werden da sie auf dieser Ebene nicht relevant sind. Ansonsten gebe ich dir recht.
Der Grund warum das Attribut nicht funktioniert ist das es wirkungslos
ist wenn man all Projekte inklusive Testanwendung innerhalb einer Solution hostet.
Mit dem Interface hat das nichts zu tun, das habe ich fehlgedeutet.
Das Attribute direkt in der Interface Definition ist Murks, das habe ich auch entfernt, in der konkreten Implementierung belasse ich es aber. Wenn du einen besseren Vorschlag für mich hast dann immer her damit 8)
Frohes neues Jahr
Sebastian
Ich möchte diesen Thread nochmal aus der Versenkung holen da ich zwischenzeitlich über eine Lösung gestolpert bin die vermutlich nicht sonderlich bekannt ist. Ich habe das Assembly Mono.Cecil.dll untersucht und folgendes gefunden.
[assembly: InternalsVisibleTo("Mono.Cecil.Pdb, PublicKey=<Viele Zahlen>")]
Das InternalsVisibleTo Attribute macht es für ein Assembly möglich ausgewählte Komponenten bevorzugt zu behandeln, innerhalb einer Service Landschaft bzw. komplexeren Frameworks keine schlechte Sache auch wenn man aus dem Design Aspekt heraus argumentieren kann das eine API zur Kompilierzeit nicht nach unten in Richtung seiner Anwender verknüpft werden darf.