Intern Methode (String)
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

String.Intern-Methode (String)

 

Ruft den Verweis des Systems auf den angegebenen String ab.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public static string Intern(
	string str
)

Parameter

str

Eine im Internpool zu suchende Zeichenfolge.

Rückgabewert

Type: System.String

Der Verweis des Systems auf str, wenn dieser im Internpool vorhanden ist, andernfalls ein neuer Verweis auf eine Zeichenfolge mit dem Wert von str.

Exception Condition
ArgumentNullException

str ist null.

Die common Language Runtime spart Speicherplatz von Zeichenfolgen durch Verwalten einer Tabelle, Pools, der einen Verweis auf jedes eindeutige Zeichenfolgenliteral deklariert oder programmgesteuert erstellt werden, in Ihrem Programm enthält Intern aufgerufen.Folglich vorhanden eine Instanz eines Zeichenfolgenliterals mit einem bestimmten Wert nur einmal im System.

Z. B. Wenn Sie dasselbe Zeichenfolgenliteral mehreren Variablen zuweisen, die Common Language Runtime denselben Verweis für das Zeichenfolgenliteral aus dem Internpool abruft, und jede Variable zugewiesen.

Die Intern -Methode verwendet den Internpool zum Suchen einer Zeichenfolge, die gleich dem Wert des str.Wenn eine solche Zeichenfolge vorhanden ist, wird der Verweis im Internpool zurückgegeben.Wenn die Zeichenfolge nicht vorhanden ist, einen Verweis auf str an den Internpool hinzugefügt, und dann dieser Verweis zurückgegeben.

Im folgenden Beispiel ist die Zeichenfolge s1 mit dem Wert "MyTest" bereits intern gespeichert, da es sich um ein Literal im Programm handelt.Die System.Text.StringBuilder -Klasse generiert ein neues Zeichenfolgenobjekt mit den gleichen Wert wie s1.Ein Verweis auf diese Zeichenfolge wird s2 zugewiesen.Die Intern -Methode sucht nach einer Zeichenfolge, die den gleichen Wert wie s2 hat.Da eine solche Zeichenfolge vorhanden ist, gibt die Methode denselben Verweis, der s1 zugeordnet ist.Anschließend wird dieser Verweis s3 zugewiesen.Die Verweise s1 und s2 sind ungleich, da sie auf unterschiedliche Objekte verweisen. die Verweise s1 und s3 hingegen sind gleich, da sie auf dieselbe Zeichenfolge verweisen.

string s1 = "MyTest"; 
string s2 = new StringBuilder().Append("My").Append("Test").ToString(); 
string s3 = String.Intern(s2); 
Console.WriteLine((Object)s2==(Object)s1); // Different references.
Console.WriteLine((Object)s3==(Object)s1); // The same reference.

Vergleichen Sie diese Methode, um die IsInterned Methode.

In der .NET Framework 3.5 Service Pack 1, die Intern Methode setzt auf ihr Verhalten in .NET Framework 1.0 und 1.1, was die Internalisierung der leeren Zeichenfolge.In dem folgenden Beispiel wird die Variable str1 erhält einen Verweis auf Empty, und die Variable str2 erhält den Verweis auf Empty zurückgegeben, die durch Aufrufen der Intern -Methode nach der Konvertierung ein StringBuilder Objekt, dessen Wert Empty in eine Zeichenfolge.Klicken Sie dann den Angaben in str1 und str2 auf Gleichheit verglichen werden.

string str1 = String.Empty;
string str2 = String.Empty;

StringBuilder sb = new StringBuilder().Append(String.Empty);
str2 = String.Intern(sb.ToString());	

if((object)str1==(object)str2)
	Console.WriteLine("The strings are equal.");
else
	Console.WriteLine("The strings are not equal.");

In der .NET Framework 1.0, .NET Framework 1.1, und .NET Framework 3.5 SP1, str1 und str2 gleich sind. In der .NET Framework 2.0 Service Pack 1 und .NET Framework 3.0, str1 und str2 nicht gleich sind.

Wenn Sie versuchen, den Gesamtumfang des Arbeitsspeichers zu reduzieren die Anwendung, denken Sie daran, die Internalisieren von Zeichenfolgen zwei unerwünschte Nebeneffekte hat.Zunächst die Speicherzuweisung für ein Praktikum String Objekte ist wahrscheinlich erst freigegeben, beendet die common Language Runtime (CLR).Der Grund ist, dass der Verweis der CLR, die intern gespeicherten String -Objekt kann nach der Anwendung oder sogar der Anwendungsdomäne beibehalten werden, beendet wird.Zweitens müssen Sie um eine Zeichenfolge internalisiert zuerst die Zeichenfolge erstellen.Die Speicherverwendung durch das String Objekt muss dennoch reserviert werden, auch wenn der Speicher schließlich vom Garbage Collector erfasst wird.

.NET Framework Version 2.0 führt die CompilationRelaxations.NoStringInterning -Enumerationsmember.Der NoStringInterning Member markiert eine Assembly als nicht erfordern Internalisierung von Zeichenfolgenliteralen erfordert.Stehen NoStringInterning auf eine Assembly mit dem CompilationRelaxationsAttribute Attribut.Auch bei Verwendung der Ngen.exe (Yerel Görüntü Oluşturucu) um eine Assembly vor der Laufzeit zu kompilieren, Zeichenfolgen nicht modulübergreifend Module.

Im folgenden Codebeispiel werden drei Zeichenfolgen mit dem gleichen Wert bestimmen, ob eine neu erstellte Zeichenfolge und eine internalisierte Zeichenfolge gleich sind.

// Sample for String.Intern(String)
using System;
using System.Text;

class Sample {
    public static void Main() {
    String s1 = "MyTest";
    String s2 = new StringBuilder().Append("My").Append("Test").ToString(); 
    String s3 = String.Intern(s2); 
    Console.WriteLine("s1 == '{0}'", s1);
    Console.WriteLine("s2 == '{0}'", s2);
    Console.WriteLine("s3 == '{0}'", s3);
    Console.WriteLine("Is s2 the same reference as s1?: {0}", (Object)s2==(Object)s1); 
    Console.WriteLine("Is s3 the same reference as s1?: {0}", (Object)s3==(Object)s1);
    }
}
/*
This example produces the following results:
s1 == 'MyTest'
s2 == 'MyTest'
s3 == 'MyTest'
Is s2 the same reference as s1?: False
Is s3 the same reference as s1?: True
*/

.NET Framework
Verfügbar seit 1.1
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Zurück zum Anfang
Anzeigen:
© 2016 Microsoft