Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Attribute durch Interface erzwingen?
AlexDozer
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

Attribute durch Interface erzwingen?

beantworten | zitieren | melden

Hi,

ich hab schon im Netz gesucht und auch hier im Forum, aber anscheinend kam noch nie jemand auf den Gedanken. Deswegen meine Frage:

Kann man in einem Interface der implementierenden Klasse vorschreiben das sie ein bestimmtes Attribut haben bzw angeben muss?

Gruß Alex
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.111

beantworten | zitieren | melden

Nein geht (meines Wissens) nicht. Ein Interface sagt nur, was du bei einer Klasse für Methoden aufrufen kannst.
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 849
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Hallo,

Nein geht nicht, aber wenn Du das abfragen der Attribute auch in deiner Hand hast, kannst Du dir per Reflection die Interfaces der Klasse holen und gucken ob da das Attribut über die Methode drüber gehauen wurd.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo AlexDozer,

... was dann zwar eine Prüfung zur Laufzeit ist und nicht zur Compilezeit, aber da man diese Prüfung gleich am Anfang des Mains aufrufen und bei Fehlschlagen laut und vernehmlich Protesttieren kann, und das Programm sogar gleich wieder beenden, ist das fast so gut wie eine Compilezeitprüfung.

herbivore
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 916

beantworten | zitieren | melden

Hi AlexDozer,

ich denke das ist eine sehr gute Anwendung für AOP (z.B. PostSharp). Du könntest das also schon zur Compilezeit prüfen und sogar dynamisch das Attribut an Klassen adaptieren die das Interface implementieren aber nicht das Attribut gesetzt haben.
Again what learned...
private Nachricht | Beiträge des Benutzers
AlexDozer
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

beantworten | zitieren | melden

PostSharp benutzen wir hier auf Arbeit. Muss ich mich anscheinend mal reinarbeiten. Hab selber noch nicht damit gearbeitet.


Gruß Alex
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 916

beantworten | zitieren | melden

Hi AlexDozer,

hier noch ein kleiner Tipp, das kann ich dir nur empfehlen mal anzuschauen. Ich glaub das ist genau das nachdem du suchst.

CustomAttributeIntroductionAspect
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rollerfreak2 am .
Again what learned...
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.860
Herkunft: Waidring

beantworten | zitieren | melden

Hallo AlexDozer,

alternativ und sofern möglich, könnte dann statt dem Attribut gleich das Interface verwendet werden. Hierzu z.B. im Interface die nötigen Eigenschaften definieren, die sonst mittels Attribut angegeben werden sollen.
Die "Verwertung" kann dann direkt od. auch per Reflection erfolgen.


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
AlexDozer
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

beantworten | zitieren | melden

@gfoidl: Du meinst das ich dem Interface die Attribute vergebe? Aber dann hätten doch alle implementieren Klassen das Attribute mit dem selben Wert oder vestehe ich was falsch?

@rollerfreak2: Danke, werd ich mir ansehen!
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.860
Herkunft: Waidring

beantworten | zitieren | melden

Hallo AlexDozer,
Zitat
Du meinst das ich dem Interface die Attribute vergebe?
Nein, das meinte ich nicht. Wenn beispielsweise folgendes Attribut vorhanden ist:


[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class MyAttribute : Attribute
{
    public string MyProperty { get; private set; }
    //---------------------------------------------------------------------
    public MyAttribute(string myArgument)
    {
        this.MyProperty = myArgument;
    }
}
dann könnte das auf jede Klasse gepappt werden. Dieses kann in folgende Schnittstelle umgewandelt werden:


public interface MyInterface
{
    string MyPropertey { get; }
}

Im Attribut-Fall schaut eine Klasse so aus:


[MyAttribute("irgendwas")]
public class Foo { }
Im Interface-Fall schaut die Klasse so aus:


public class Boo : IMyInterface
{
    public string MyProperty { get; private set; }

    public Boo()
    {
        this.MyProperty("irgendwas");
    }
}

So wars gemeint. Hier siehst du auch gleich den Vorteil von den Attribute, nämlich dass es deklarativer ist und über die Meta-Daten ersichtlich ist, welchen Wert MyProperty hat.



mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers