Eckige Klammern vor einer Methode

Hallo,

wenn ich mir fremde Listings ansehe, dann verstehe ich manchmal nicht, was es bedeutet, wenn z.B. eine Zeile vor einer Methode eine oder mehrere Klassen oder Dateien innerhalb zweier eckiger Klammern stehen.

Kann innerhalb des folgenden Codes ansonsten nicht auf bestimmte Inhalte zugegriffen werden?

Beispiel:

[Serializable()]
[System.Diagnostics.DebuggerStepThrough()]
public class AuthorsDataSet : DataSet
{

Ist z.B. System.Diagnostics nicht ein Namespace und kann darauf in C# nicht durch „using“ zugegriffen werden?

Gruß
Alexander

Hallo Alex

Die dinger in der eckigen Klammer sind Attribute.
Attribute sind wie MetaDaten die an einer Klasse angewendet werden können.

[Serializable()] heisst z.b. in deinem Fall das das Authors DataSet Serialisiert werden kann.

Serializable Attribute:
http://msdn.microsoft.com/library/default.asp?url=/l…

Du kannst auch eigene Attribute schreiben und danch anwenden:
http://msdn.microsoft.com/library/default.asp?url=/l…

gruss
giuseppe

gsharp.blogspot.com

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Giuseppe,

vielen Dank für die Antwort, da hat sich ein ganz neues Feld für mich aufgetan, aber ich habe immer noch Probleme, mir klarzumachen, was es mit solchen Attributen auf sich hat. Die Möglichket, komplette Objekte zu serialisieren, ist neu für mich und stellt, wie ich das jetzt verstehe, eine ganz einfache Möglichkeit bereit, Daten abzuspeichern, anstatt die einzelnen Variablen „per Hand“ in eine Datei zu schreiben. Und eine (z.B.) Klasse, die man so sichern will, muss also zuvor das entsprechende Attribut bekommen. Aha…

Aber zum Beispiel können Attribute doch auch Verweise zu Win32-dll-Dateien sein, auf die ich in der Methode zugreifen kann. Irgendwie kriege ich diese breiten Möglichkeiten, die Attribute beherbergen, noch nicht unter einen Hut…

Wozu müsste zum Beispiel solch eine dll-Datei zur Benutzung in der Methode als Attribut zur Verfügung gestellt werden?

Viele Grüße
Alexander

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo

einfache Möglichkeit bereit, Daten abzuspeichern, anstatt die
einzelnen Variablen „per Hand“ in eine Datei zu schreiben. Und
eine (z.B.) Klasse, die man so sichern will, muss also zuvor
das entsprechende Attribut bekommen. Aha…

Vorsicht ist dabei geboten! Diese glorreiche Idee hatte ich auch bereits. Folgendes szenario

  1. Objekt vom Typ MyClass(Version 1.0) wird serialisiert in die Datei MyStore.xml (oder MyStore.bin)
  2. MyClass wird erweitert und modifiziert (Version 1.1)
  3. aus MyStore.xml (oder MyStore.bin) soll wieder ein Objekt erstellt Verden (Version 1.1)

Bei 3. gehts schief, da Struktur nicht mit dem Objekt übereinstimmt!

Aber zum Beispiel können Attribute doch auch Verweise zu
Win32-dll-Dateien sein, auf die ich in der Methode zugreifen
kann. Irgendwie kriege ich diese breiten Möglichkeiten, die
Attribute beherbergen, noch nicht unter einen Hut…

Wozu müsste zum Beispiel solch eine dll-Datei zur Benutzung in
der Methode als Attribut zur Verfügung gestellt werden?

nicht das ich wüsste. Wie kommst Du zu dieser annahme, dass Attribute Verweise sein können? Mir ist das unbekannt.

gruss
giuseppe

gsharp.blogspot.com

Hallo Giuseppe,

Wozu müsste zum Beispiel solch eine dll-Datei zur Benutzung in
der Methode als Attribut zur Verfügung gestellt werden?

nicht das ich wüsste. Wie kommst Du zu dieser annahme, dass
Attribute Verweise sein können? Mir ist das unbekannt.

So habe ich z.B. folgendes Attribut interpretiert:
[DllImport(„user32.dll“, CharSet=CharSet.Auto)]

Verweis nicht, sorry, aber Einbinden von Code. Das angegebene Attribut sagt doch aus, dass die dll in dem folgenden Code benutzt werden kann, oder? Kann also durch ein Attribut eine komplette dll „angehängt“ werden?

Gruß
Alexander

Hallo Giuseppe,

ich habe es selbst herausgefunden: dieses Attribut ist für die CLR ein Hinweis, wo Code im Falle einer externen Methode zu finden ist. Also sucht die CLR automatisch nach dem Inhalt dieses Attributes, nehme ich an.

Vielen Dank und Gruß
Alexander

So habe ich z.B. folgendes Attribut interpretiert:
[DllImport(„user32.dll“, CharSet=CharSet.Auto)]

ach das :smile:
Wie du unten schon selber festgestellt hast, ermöglicht das Attribut „DllImport“ das „bekanntmachen“ einer Win32 API DLL.

gruss