ResourceReader Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Listet die Ressourcen in einer binären Ressourcendatei (.resources) durch Lesen von sequenziellen Ressourcenname-/Wert-Paaren auf.
public ref class ResourceReader sealed : System::Resources::IResourceReader
public ref class ResourceReader sealed : IDisposable
public ref class ResourceReader sealed : IDisposable, System::Collections::IEnumerable, System::Resources::IResourceReader
public sealed class ResourceReader : System.Resources.IResourceReader
public sealed class ResourceReader : IDisposable
public sealed class ResourceReader : IDisposable, System.Collections.IEnumerable, System.Resources.IResourceReader
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ResourceReader : System.Resources.IResourceReader
type ResourceReader = class
interface IEnumerable
interface IDisposable
interface IResourceReader
type ResourceReader = class
interface IDisposable
type ResourceReader = class
interface IResourceReader
interface IEnumerable
interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type ResourceReader = class
interface IResourceReader
interface IEnumerable
interface IDisposable
Public NotInheritable Class ResourceReader
Implements IResourceReader
Public NotInheritable Class ResourceReader
Implements IDisposable
Public NotInheritable Class ResourceReader
Implements IDisposable, IEnumerable, IResourceReader
- Vererbung
-
ResourceReader
- Attribute
- Implementiert
Hinweise
Wichtig
Das Aufrufen von Methoden aus dieser Klasse mit nicht vertrauenswürdigen Daten stellt ein Sicherheitsrisiko dar. Rufen Sie die Methoden aus dieser Klasse nur mit vertrauenswürdigen Daten auf. Weitere Informationen finden Sie unter "Alle Eingaben überprüfen".
Die ResourceReader Klasse stellt eine Standardimplementierung der IResourceReader Schnittstelle bereit. Eine ResourceReader Instanz stellt entweder eine eigenständige Ressourcendatei oder eine Ressourcendatei dar, die in eine Assembly eingebettet ist. Es wird verwendet, um die Ressourcen in einer Ressourcendatei aufzählen und seine Namen-/Wertpaare abzurufen. Es unterscheidet sich von der Klasse, die verwendet wird, um angegebene benannte Ressourcen aus einer Ressourcendatei abzurufen, die ResourceManager in eine Assembly eingebettet ist. Die ResourceManager Klasse wird verwendet, um Ressourcen abzurufen, deren Namen im Voraus bekannt sind, während die ResourceReader Klasse nützlich ist, um Ressourcen abzurufen, deren Zahl oder genaue Namen zur Kompilierungszeit nicht bekannt sind. Beispielsweise kann eine Anwendung eine Ressourcendatei verwenden, um Konfigurationsinformationen zu speichern, die in Abschnitte und Elemente in einem Abschnitt organisiert sind, wobei die Anzahl der Abschnitte oder Elemente in einem Abschnitt im Voraus nicht bekannt ist. Ressourcen können dann generische (zSection1. B. , , Section1Item1``Section1Item2usw.) benannt und mithilfe eines ResourceReader Objekts abgerufen werden.
Wichtig
Dieser Typ implementiert die IDisposable-Schnittstelle. Nach Abschluss der Verwendung sollten Sie den Typ entweder direkt oder indirekt löschen. Zum direkten Löschen des Typs rufen Sie seine Dispose-Methode in einem try/catch-Block auf. Zum indirekten Löschen verwenden Sie ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt „Verwenden eines Objekts, das IDisposable implementiert“ des Themas „Die IDisposable-Schnittstelle“.
Weitere Informationen zur Verwendung der ResourceReader Klasse finden Sie in den folgenden Abschnitten:
Instanziieren eines ResourceReader-Objekts
Eine Ressourcendatei ist eine binärdatei, die entweder aus einer Textdatei oder einer XML-RESX-Datei durch Resgen.exe (Resource File Generator) kompiliert wurde. Ein ResourceReader Objekt kann entweder eine eigenständige .resources-Datei oder eine Ressourcendatei darstellen, die in eine Assembly eingebettet wurde.
Um ein ResourceReader Objekt zu instanziieren, das aus einer eigenständigen Ressourcendatei liest, verwenden Sie den ResourceReader Klassenkonstruktor entweder mit einem Eingabestrom oder einer Zeichenfolge, die den Dateinamen der Ressourcen enthält. Im folgenden Beispiel werden beide Ansätze veranschaulicht. Das erste Instanziiert ein ResourceReader Objekt, das eine Ressourcendatei mit dem Resources1.resources Namen des Dateinamens darstellt. Der zweite Instanziiert ein ResourceReader Objekt, das eine Ressourcendatei mit dem Namen Resources2.resources eines Datenstroms darstellt, der aus der Datei erstellt wurde.
// Instantiate a standalone .resources file from its filename.
var rr1 = new System.Resources.ResourceReader("Resources1.resources");
// Instantiate a standalone .resources file from a stream.
var fs = new System.IO.FileStream(@".\Resources2.resources",
System.IO.FileMode.Open);
var rr2 = new System.Resources.ResourceReader(fs);
' Instantiate a standalone .resources file from its filename.
Dim rr1 As New System.Resources.ResourceReader("Resources1.resources")
' Instantiate a standalone .resources file from a stream.
Dim fs As New System.IO.FileStream(".\Resources2.resources",
System.IO.FileMode.Open)
Dim rr2 As New System.Resources.ResourceReader(fs)
Um ein Objekt zu erstellen, das eine eingebettete Ressourcendatei darstellt, instanziieren Sie ein ResourceReader Assembly Objekt aus der Assembly, in die die Ressourcendatei eingebettet ist. Die Assembly.GetManifestResourceStream Methode gibt ein Stream Objekt zurück, das an den ResourceReader(Stream) Konstruktor übergeben werden kann. Im folgenden Beispiel wird ein ResourceReader Objekt instanziiert, das eine eingebettete Ressourcendatei darstellt.
System.Reflection.Assembly assem =
System.Reflection.Assembly.LoadFrom(@".\MyLibrary.dll");
System.IO.Stream fs =
assem.GetManifestResourceStream("MyCompany.LibraryResources.resources");
var rr = new System.Resources.ResourceReader(fs);
Dim assem As System.Reflection.Assembly =
System.Reflection.Assembly.LoadFrom(".\MyLibrary.dll")
Dim fs As System.IO.Stream =
assem.GetManifestResourceStream("MyCompany.LibraryResources.resources")
Dim rr As New System.Resources.ResourceReader(fs)
Aufzählen der Ressourcen eines ResourceReader-Objekts
Um die Ressourcen in einer Ressourcendatei aufzählen zu können, rufen Sie die Methode auf, die GetEnumerator ein System.Collections.IDictionaryEnumerator Objekt zurückgibt. Sie rufen die IDictionaryEnumerator.MoveNext Methode auf, um von einer Ressource zum nächsten zu wechseln. Die Methode gibt zurück false , wenn alle Ressourcen in der Ressourcendatei aufgezählt wurden.
Hinweis
Obwohl die ResourceReader Klasse die IEnumerable Schnittstelle und die IEnumerable.GetEnumerator Methode implementiert, stellt die ResourceReader.GetEnumerator Methode die IEnumerable.GetEnumerator Implementierung nicht bereit. Stattdessen gibt die ResourceReader.GetEnumerator Methode ein IDictionaryEnumerator Schnittstellenobjekt zurück, das Zugriff auf das Name-/Wertpaar der einzelnen Ressourcen bereitstellt.
Sie können die einzelnen Ressourcen in der Auflistung auf zwei Arten abrufen:
Sie können jede Ressource in der System.Collections.IDictionaryEnumerator Auflistung iterieren und Eigenschaften verwenden System.Collections.IDictionaryEnumerator , um den Ressourcennamen und den Wert abzurufen. Wir empfehlen diese Technik, wenn alle Ressourcen vom gleichen Typ sind, oder Sie wissen den Datentyp jeder Ressource.
Sie können den Namen jeder Ressource abrufen, wenn Sie die System.Collections.IDictionaryEnumerator Auflistung iterieren und die Methode aufrufen, um die GetResourceData Daten der Ressource abzurufen. Wir empfehlen diesen Ansatz, wenn Sie nicht den Datentyp jeder Ressource kennen oder wenn der vorherige Ansatz Ausnahmen auslöst.
Abrufen von Ressourcen mithilfe von IDictionaryEnumerator-Eigenschaften
Die erste Methode zum Aufzählen der Ressourcen in einer Ressourcendatei umfasst das direkte Abrufen des Namens-/Wertpaars jeder Ressource. Nachdem Sie die IDictionaryEnumerator.MoveNext Methode aufgerufen haben, um zu jeder Ressource in der Auflistung zu wechseln, können Sie den Ressourcennamen aus der IDictionaryEnumerator.Key Eigenschaft und den Ressourcendaten aus der IDictionaryEnumerator.Value Eigenschaft abrufen.
Im folgenden Beispiel wird gezeigt, wie Sie den Namen und den Wert jeder Ressource in einer Ressourcendatei mithilfe der IDictionaryEnumerator.Key Eigenschaften IDictionaryEnumerator.Value abrufen. Um das Beispiel auszuführen, erstellen Sie die folgende Textdatei namens ApplicationResources.txt, um Zeichenfolgenressourcen zu definieren.
Title="Contact Information"
Label1="First Name:"
Label2="Middle Name:"
Label3="Last Name:"
Label4="SSN:"
Label5="Street Address:"
Label6="City:"
Label7="State:"
Label8="Zip Code:"
Label9="Home Phone:"
Label10="Business Phone:"
Label11="Mobile Phone:"
Label12="Other Phone:"
Label13="Fax:"
Label14="Email Address:"
Label15="Alternate Email Address:"
Anschließend können Sie die Textdatei in eine Binärdatei namens ApplicationResources.resources konvertieren, indem Sie den folgenden Befehl verwenden:
resgen ApplicationResources.txt
Im folgenden Beispiel wird dann die ResourceReader Klasse verwendet, um jede Ressource in der eigenständigen binären Ressourcendatei aufzählen und den Schlüsselnamen und den entsprechenden Wert anzuzeigen.
using System;
using System.Collections;
using System.Resources;
public class Example
{
public static void Main()
{
Console.WriteLine("Resources in ApplicationResources.resources:");
ResourceReader res = new ResourceReader(@".\ApplicationResources.resources");
IDictionaryEnumerator dict = res.GetEnumerator();
while (dict.MoveNext())
Console.WriteLine(" {0}: '{1}' (Type {2})",
dict.Key, dict.Value, dict.Value.GetType().Name);
res.Close();
}
}
// The example displays the following output:
// Resources in ApplicationResources.resources:
// Label3: '"Last Name:"' (Type String)
// Label2: '"Middle Name:"' (Type String)
// Label1: '"First Name:"' (Type String)
// Label7: '"State:"' (Type String)
// Label6: '"City:"' (Type String)
// Label5: '"Street Address:"' (Type String)
// Label4: '"SSN:"' (Type String)
// Label9: '"Home Phone:"' (Type String)
// Label8: '"Zip Code:"' (Type String)
// Title: '"Contact Information"' (Type String)
// Label12: '"Other Phone:"' (Type String)
// Label13: '"Fax:"' (Type String)
// Label10: '"Business Phone:"' (Type String)
// Label11: '"Mobile Phone:"' (Type String)
// Label14: '"Email Address:"' (Type String)
// Label15: '"Alternate Email Address:"' (Type String)
Imports System.Collections
Imports System.Resources
Module Example
Public Sub Main()
Console.WriteLine("Resources in ApplicationResources.resources:")
Dim res As New ResourceReader(".\ApplicationResources.resources")
Dim dict As IDictionaryEnumerator = res.GetEnumerator()
Do While dict.MoveNext()
Console.WriteLine(" {0}: '{1}' (Type {2})", dict.Key, dict.Value, dict.Value.GetType().Name)
Loop
res.Close()
End Sub
End Module
' The example displays output like the following:
' Resources in ApplicationResources.resources:
' Label3: '"Last Name:"' (Type String)
' Label2: '"Middle Name:"' (Type String)
' Label1: '"First Name:"' (Type String)
' Label7: '"State:"' (Type String)
' Label6: '"City:"' (Type String)
' Label5: '"Street Address:"' (Type String)
' Label4: '"SSN:"' (Type String)
' Label9: '"Home Phone:"' (Type String)
' Label8: '"Zip Code:"' (Type String)
' Title: '"Contact Information"' (Type String)
' Label12: '"Other Phone:"' (Type String)
' Label13: '"Fax:"' (Type String)
' Label10: '"Business Phone:"' (Type String)
' Label11: '"Mobile Phone:"' (Type String)
' Label14: '"Email Address:"' (Type String)
' Label15: '"Alternate Email Address:"' (Type String)
Der Versuch, Ressourcendaten aus der IDictionaryEnumerator.Value Eigenschaft abzurufen, kann die folgenden Ausnahmen auslösen:
Wenn FormatException sich die Daten nicht im erwarteten Format befindet.
Wenn FileNotFoundException die Assembly, die den Typ enthält, zu dem die Daten gehören, nicht gefunden werden kann.
Wenn TypeLoadException der Typ, zu dem die Daten gehören, nicht gefunden werden kann.
In der Regel werden diese Ausnahmen ausgelöst, wenn die Ressourcendatei manuell geändert wurde, wenn die Assembly, in der ein Typ definiert wird, entweder nicht mit einer Anwendung enthalten ist oder nicht versehentlich gelöscht wurde, oder wenn die Assembly eine ältere Version ist, die einen Typ vorgibt. Wenn eine dieser Ausnahmen ausgelöst wird, können Sie Ressourcen abrufen, indem Sie jede Ressource aufzählen und die GetResourceData Methode aufrufen, wie im folgenden Abschnitt dargestellt. Dieser Ansatz bietet Ihnen einige Informationen zum Datentyp, den die IDictionaryEnumerator.Value Eigenschaft zurückgegeben hat.
Abrufen von Ressourcen nach Name mit GetResourceData
Der zweite Ansatz zum Aufzählen von Ressourcen in einer Ressourcendatei umfasst auch das Navigieren durch die Ressourcen in der Datei durch Aufrufen der IDictionaryEnumerator.MoveNext Methode. Für jede Ressource rufen Sie den Namen der Ressource aus der Eigenschaft ab, die dann an die Methode übergeben wird, um die Daten der IDictionaryEnumerator.Key GetResourceData(String, String, Byte[]) Ressource abzurufen. Dies wird als Bytearray im resourceData Argument zurückgegeben.
Dieser Ansatz ist besser als das Abrufen des Ressourcennamens und des Werts aus den IDictionaryEnumerator.Key und IDictionaryEnumerator.Value den Eigenschaften, da er die tatsächlichen Bytes zurückgibt, die den Ressourcenwert bilden. Wenn der Versuch, die Ressource abzurufen, jedoch eine Ausnahme auslöst, kann die GetResourceData Methode die Quelle der Ausnahme identifizieren, indem Informationen zum Datentyp der Ressource bereitgestellt werden. Weitere Informationen zu der Zeichenfolge, die den Datentyp der Ressource angibt, finden Sie unter GetResourceData.
Im folgenden Beispiel wird veranschaulicht, wie Sie diesen Ansatz zum Abrufen von Ressourcen und zum Behandeln von Ausnahmen verwenden, die ausgelöst werden. Es erstellt programmgesteuert eine binäre Ressourcendatei, die vier Zeichenfolgen, einen Boolean, eine ganze Zahl, eine Bitmap und ein benutzerdefiniertes DateTimeTZI Objekt enthält. Führen Sie zum Ausführen des Beispiels folgendes aus:
Erstellen Sie eine Assembly namens Library.dll, die die
DateTimeTZIStruktur enthält. Im Folgenden handelt es sich um den Quellcode für die Assembly.using System; [Serializable] public struct DateTimeTZI { DateTime Date; TimeZoneInfo TimeZone; public DateTimeTZI(DateTime date, TimeZoneInfo tz) { this.Date = date; this.TimeZone = tz; } public override string ToString() { return String.Format("{0:dd/MM/yyyy hh:mm:ss tt} {1}", Date, TimeZone.StandardName); } }<Serializable> Public Structure DateTimeTZI Dim [Date] As DateTime Dim TimeZone As TimeZoneInfo Public Sub New([date] As DateTime, tz As TimeZoneInfo) Me.[Date] = [date] Me.TimeZone = tz End Sub Public Overrides Function ToString() As String Return String.Format("{0:dd/MM/yyyy hh:mm:ss tt} {1}", [Date], TimeZone.StandardName) End Function End StructureKompilieren Sie den Quellcode in C# mithilfe des folgenden Befehls:
csc /t:library library.csSie können sie auch in Visual Basic kompilieren, indem Sie den folgenden Befehl verwenden:
vbc library.vb /t:libraryKompilieren und Ausführen des folgenden Quellcodes, der eine Ressourcendatei namens ContactResources.resources erstellt.
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Resources; using System.Runtime.Serialization.Formatters.Binary; using System.Text; public class Example { public static void Main() { // Bitmap as stream. MemoryStream bitmapStream = new MemoryStream(); Bitmap bmp = new Bitmap(@".\ContactsIcon.jpg"); bmp.Save(bitmapStream, ImageFormat.Jpeg); // Define resources to be written. using (ResourceWriter rw = new ResourceWriter(@".\ContactResources.resources")) { rw.AddResource("Title", "Contact List"); rw.AddResource("NColumns", 5); rw.AddResource("Icon", bitmapStream); rw.AddResource("Header1", "Name"); rw.AddResource("Header2", "City"); rw.AddResource("Header3", "State"); rw.AddResource("VersionDate", new DateTimeTZI( new DateTime(2012, 5, 18), TimeZoneInfo.Local)); rw.AddResource("ClientVersion", true); rw.Generate(); } } }Imports System.Drawing Imports System.IO Imports System.Resources Imports System.Runtime.Serialization.Formatters.Binary Imports System.Text Module Example Public Sub Main() ' Bitmap as stream. Dim bitmapStream As New MemoryStream() Dim bmp As New Bitmap(".\ContactsIcon.jpg") bmp.Save(bitmapStream, Imaging.ImageFormat.jpeg) ' Define resources to be written. Using rw As New ResourceWriter(".\ContactResources.resources") rw.AddResource("Title", "Contact List") rw.AddResource("NColumns", 5) rw.AddResource("Icon", bitmapStream) rw.AddResource("Header1", "Name") rw.AddResource("Header2", "City") rw.AddResource("Header3", "State") rw.AddResource("VersionDate", New DateTimeTZI(#05/18/2012#, TimeZoneInfo.Local)) rw.AddResource("ClientVersion", True) rw.Generate() End Using End Sub End ModuleDie Quellcodedatei wird "CreateResources.cs" genannt. Sie können es in C# mithilfe des folgenden Befehls kompilieren:
csc CreateResources.cs /r:library.dllSie können sie auch in Visual Basic kompilieren, indem Sie den folgenden Befehl verwenden:
vbc CreateResources.vb /r:library.dllKompilieren Sie den folgenden Code, um die Ressourcen in der Datei "ContactResources.resources" aufzählen zu können.
using System; using System.Collections; using System.Drawing; using System.IO; using System.Resources; using System.Runtime.Serialization.Formatters.Binary; public class Example { public static void Main() { ResourceReader rdr = new ResourceReader(@".\ContactResources.resources"); IDictionaryEnumerator dict = rdr.GetEnumerator(); while (dict.MoveNext()) { Console.WriteLine("Resource Name: {0}", dict.Key); try { Console.WriteLine(" Value: {0}", dict.Value); } catch (FileNotFoundException) { Console.WriteLine(" Exception: A file cannot be found."); DisplayResourceInfo(rdr, (string) dict.Key, false); } catch (FormatException) { Console.WriteLine(" Exception: Corrupted data."); DisplayResourceInfo(rdr, (string) dict.Key, true); } catch (TypeLoadException) { Console.WriteLine(" Exception: Cannot load the data type."); DisplayResourceInfo(rdr, (string) dict.Key, false); } } } private static void DisplayResourceInfo(ResourceReader rr, string key, bool loaded) { string dataType = null; byte[] data = null; rr.GetResourceData(key, out dataType, out data); // Display the data type. Console.WriteLine(" Data Type: {0}", dataType); // Display the bytes that form the available data. Console.Write(" Data: "); int lines = 0; foreach (var dataItem in data) { lines++; Console.Write("{0:X2} ", dataItem); if (lines % 25 == 0) Console.Write("\n "); } Console.WriteLine(); // Try to recreate current state of data. // Do: Bitmap, DateTimeTZI switch (dataType) { // Handle internally serialized string data (ResourceTypeCode members). case "ResourceTypeCode.String": BinaryReader reader = new BinaryReader(new MemoryStream(data)); string binData = reader.ReadString(); Console.WriteLine(" Recreated Value: {0}", binData); break; case "ResourceTypeCode.Int32": Console.WriteLine(" Recreated Value: {0}", BitConverter.ToInt32(data, 0)); break; case "ResourceTypeCode.Boolean": Console.WriteLine(" Recreated Value: {0}", BitConverter.ToBoolean(data, 0)); break; // .jpeg image stored as a stream. case "ResourceTypeCode.Stream": const int OFFSET = 4; int size = BitConverter.ToInt32(data, 0); Bitmap value1 = new Bitmap(new MemoryStream(data, OFFSET, size)); Console.WriteLine(" Recreated Value: {0}", value1); break; // Our only other type is DateTimeTZI. default: // No point in deserializing data if the type is unavailable. if (dataType.Contains("DateTimeTZI") && loaded) { BinaryFormatter binFmt = new BinaryFormatter(); object value2 = binFmt.Deserialize(new MemoryStream(data)); Console.WriteLine(" Recreated Value: {0}", value2); } break; } Console.WriteLine(); } }Imports System.Collections Imports System.Drawing Imports System.IO Imports System.Resources Imports System.Runtime.Serialization.Formatters.Binary Module Example Public Sub Main() Dim rdr As New ResourceReader(".\ContactResources.resources") Dim dict As IDictionaryEnumerator = rdr.GetEnumerator() Do While dict.MoveNext() Console.WriteLine("Resource Name: {0}", dict.Key) Try Console.WriteLine(" Value: {0}", dict.Value) Catch e As FileNotFoundException Console.WriteLine(" Exception: A file cannot be found.") DisplayResourceInfo(rdr, CStr(dict.Key), False) Catch e As FormatException Console.WriteLine(" Exception: Corrupted data.") DisplayResourceInfo(rdr, CStr(dict.Key), True) Catch e As TypeLoadException Console.WriteLine(" Exception: Cannot load the data type.") DisplayResourceInfo(rdr, CStr(dict.Key), False) End Try Loop End Sub Private Sub DisplayResourceInfo(rr As ResourceReader, key As String, loaded As Boolean) Dim dataType As String = Nothing Dim data() As Byte = Nothing rr.GetResourceData(key, dataType, data) ' Display the data type. Console.WriteLine(" Data Type: {0}", dataType) ' Display the bytes that form the available data. Console.Write(" Data: ") Dim lines As Integer = 0 For Each dataItem In data lines += 1 Console.Write("{0:X2} ", dataItem) If lines Mod 25 = 0 Then Console.Write("{0} ", vbCrLf) Next Console.WriteLine() ' Try to recreate current state of data. ' Do: Bitmap, DateTimeTZI Select Case dataType ' Handle internally serialized string data (ResourceTypeCode members). Case "ResourceTypeCode.String" Dim reader As New BinaryReader(New MemoryStream(data)) Dim binData As String = reader.ReadString() Console.WriteLine(" Recreated Value: {0}", binData) Case "ResourceTypeCode.Int32" Console.WriteLine(" Recreated Value: {0}", BitConverter.ToInt32(data, 0)) Case "ResourceTypeCode.Boolean" Console.WriteLine(" Recreated Value: {0}", BitConverter.ToBoolean(data, 0)) ' .jpeg image stored as a stream. Case "ResourceTypeCode.Stream" Const OFFSET As Integer = 4 Dim size As Integer = BitConverter.ToInt32(data, 0) Dim value As New Bitmap(New MemoryStream(data, OFFSET, size)) Console.WriteLine(" Recreated Value: {0}", value) ' Our only other type is DateTimeTZI. Case Else ' No point in deserializing data if the type is unavailable. If dataType.Contains("DateTimeTZI") And loaded Then Dim binFmt As New BinaryFormatter() Dim value As Object = binFmt.Deserialize(New MemoryStream(data)) Console.WriteLine(" Recreated Value: {0}", value) End If End Select Console.WriteLine() End Sub End ModuleNach dem Ändern des Quellcodes (z. B. durch absichtliches Auslösen eines FormatException Am Endes des
tryBlockes) oder Umbenennen der Library.dll Assembly, damit sie zur Laufzeit nicht verfügbar ist, können Sie das Beispiel ausführen, um zu sehen, wie GetResourceData Aufrufe einige Ressourceninformationen abrufen oder neu erstellen können.
Konstruktoren
| ResourceReader(Stream) |
Initialisiert eine neue Instanz der ResourceReader-Klasse für den angegebenen Stream. |
| ResourceReader(String) |
Initialisiert eine neue Instanz der ResourceReader-Klasse für die angegebene benannten Ressourcendatei. |
Methoden
| Close() |
Gibt alle diesem ResourceReader-Objekt zugeordneten Ressourcen des Betriebssystems frei. |
| Dispose() |
Gibt alle von der aktuellen Instanz der ResourceReader-Klasse verwendeten Ressourcen frei. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
| GetEnumerator() |
Gibt einen Enumerator für dieses ResourceReader-Objekt zurück. |
| GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
| GetResourceData(String, String, Byte[]) |
Ruft den Typnamen und die Daten einer benannten Ressource aus einer geöffneten Ressourcendatei oder einem geöffneten Datenstrom ab. |
| GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| IDisposable.Dispose() |
Gibt die von der ResourceReader verwendeten Ressourcen frei. |
| IEnumerable.GetEnumerator() |
Gibt einen Enumerator für dieses ResourceReader-Objekt zurück. |
Erweiterungsmethoden
| Cast<TResult>(IEnumerable) |
Wandelt die Elemente eines IEnumerable in den angegebenen Typ um |
| OfType<TResult>(IEnumerable) |
Filtert die Elemente eines IEnumerable anhand eines angegebenen Typs |
| AsParallel(IEnumerable) |
Ermöglicht die Parallelisierung einer Abfrage. |
| AsQueryable(IEnumerable) |
Konvertiert einen IEnumerable in einen IQueryable. |