2017-06-04 6 views
0

Angenommen, ich habe die einfachste Schnittstelle für alle Komponenten in meinem Programm.Erzwingen Attribut hinzufügen für alle Klassen, die eine Schnittstelle implementieren

public interface IComponent 
{    
} 

Ich weiß, dass jede einzelne Komponente geschrieben wird für das Projekt zur Implementierung dieser Schnittstelle hat, und ich weiß, dass alle diese Komponenten auf der Festplatte unter Verwendung von C# 's BinaryFormatter gespeichert werden. Das bedeutet, dass jede Komponente mit dem Attribut [Serializable] versehen werden muss. Gibt es eine Möglichkeit, das Hinzufügen dieses Attributs jetzt zu erzwingen?

Ich sage "jetzt", weil ich verschiedene SO-Fragen finden kann, die mir sagen, dass dies nicht möglich ist - aber alle Fragen, die ich finden kann, stammen aus dem Jahr 2008. Hat sich irgendetwas in der C# -Spezifikation geändert? Oder muss ich eine der in den alten Antworten beschriebenen Problemumgehungen verwenden?

+1

Die älteste C# -Frage, die ich auf Stack Overflow finden kann, ist von Juli 2008. Wie haben Sie Antworten auf Ihre Frage gefunden, die von _before_ 2008 sind? Viele haben sich in der C# -Spezifikation geändert, aber nichts, was sich ändern würde, wie Attribute zur Kompilierungszeit verwendet werden (d. H. Sie sind meistens nicht ... es gibt nur wenige Ausnahmen, die speziell für den Compiler bekannt sind). Sie sollten Ihre Frage als Duplikat einer der vorhandenen Antworten, die Sie gefunden haben, schließen oder einfach ganz löschen. –

+0

Der "oder frühere" Teil ist irreführend, seit SO 2008 gestartet wurde. Ich schließe die Frage, ob Ihr Kommentar tatsächlich die Antwort ist: Nichts hat sich geändert, und es gibt keine Möglichkeit, die Attributdekoration zu erzwingen. Aber ich hielt es für vernünftig zu fragen, da sich seit C# 3.0 und 6.0 eine Menge verändert hat. – Drakestar

Antwort

0

Sie könnten Komponententests schreiben, die alle Implementierungen von IComponent aus Ihrer Bibliothek mithilfe von Reflektion abfragen und überprüft, ob sie das Attribut Serializable auf ihnen haben. Ich glaube nicht, dass etwas Neues in .NET seit 2008 eingeführt wurde, das diese Prüfung kompilieren konnte, sorry.

Verwandte Themen