(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

String.Intern-Methode

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
Typ: System.String
Eine im Internpool zu suchende Zeichenfolge.

Rückgabewert

Typ: 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.

AusnahmeBedingung
ArgumentNullException

str ist null.

Die Common Language Runtime behält den Speicherplatz von Zeichenfolgen durch Verwalten einer Tabelle bei, die als Internpool bezeichnet wird und einen Verweis auf jedes eindeutige Zeichenfolgenliteral enthält, das im Programm deklariert oder programmgesteuert erstellt wurde. Daher ist eine Instanz eines Zeichenfolgenliterals mit einem bestimmten Wert nur einmal im System vorhanden.

Wenn Sie z. B. dasselbe Zeichenfolgenliteral mehreren Variablen zuweisen, ruft die Common Language Runtime denselben Verweis für das Zeichenfolgenliteral aus dem Internpool ab und weist ihn jeder Variablen zu.

Die Intern-Methode verwendet den Internpool zum Suchen einer Zeichenfolge, die dem Wert von str entspricht. Wenn eine solche Zeichenfolge vorhanden ist, wird ihr Verweis im Internpool zurückgegeben. Wenn die Zeichenfolge nicht vorhanden ist, wird dem Internpool ein Verweis auf str hinzugefügt und dann dieser Verweis zurückgegeben.

Im folgenden Beispiel ist die Zeichenfolge s1 mit dem Wert "MyTest" bereits internalisiert vorhanden, da es sich um ein Literal im Programm handelt. Die System.Text.StringBuilder-Klasse generiert ein neues Zeichenfolgenobjekt mit demselben Wert wie s1. Ein Verweis auf diese Zeichenfolge wird s2 zugewiesen. Die Intern-Methode sucht nach einer Zeichenfolge, die demselben Wert hat wie s2. Da eine solche Zeichenfolge vorhanden ist, gibt die Methode denselben Verweis zurück, 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 mit der IsInterned-Methode.

Versionsaspekte

In .NET Framework 3.5 Service Pack 1 stellt die Intern-Methode zu ihr Verhalten in .NET Framework 1.0 und 1,1 in Bezug auf den Internierens der leeren Zeichenfolge wiederhergestellt. Im folgenden Beispiel wird der Variablen str1 ein Verweis auf Empty zugewiesen, und der Variablen str2 wird ein Verweis auf Empty zugewiesen, der durch den Aufruf der Intern-Methode zurückgegeben wird, nachdem ein StringBuilder-Objekt mit dem Wert Empty in eine Zeichenfolge konvertiert wurde. Anschließend werden die in str1 und str2 enthaltenen Verweise auf Gleichheit verglichen.


		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 .NET Framework 1.0 können .NET Framework 1.1 und .NET Framework 3.5 SP1, str1 und str2 gleich. In .NET Framework 2.0 Service Pack 1 und .NET Framework 3.0 sind str1 und str2 nicht gleich.

Überlegungen zur Leistung

Wenn Sie versuchen, die gesamte für die Anwendung belegte Speichermenge zu verringern, berücksichtigen Sie, dass das Internalisieren von Zeichenfolgen zwei unerwünschte Nebeneffekte hat. Zunächst wird der für internalisierte String-Objekte belegte Speicher wahrscheinlich erst nach Beenden der Common Language Runtime (CLR) freigegeben. Der Grund dafür besteht darin, dass der Verweis der CLR auf das internalisierte String-Objekt auch nach Beenden der Anwendung oder sogar der Anwendungsdomäne beibehalten werden kann. Des weiteren muss eine Zeichenfolge zunächst erstellt werden, um internalisiert werden zu können. Der vom String-Objekt verwendete Speicher muss dennoch belegt werden, auch wenn der Speicher schließlich durch die Garbage Collection freigegeben wird.

In .NET Framework, Version 2.0, wird der CompilationRelaxations.NoStringInterning-Enumerationsmember eingeführt. Durch die Markierung einer Assembly mit dem NoStringInterning-Member wird festgelegt, dass die Assembly keine Internalisierung von Zeichenfolgenliteralen erfordert. Sie können NoStringInterning mit dem CompilationRelaxationsAttribute-Attribut auf eine Assembly anwenden. Wenn Sie Ngen.exe (Native Image Generator) verwenden, um eine Assembly vor der Laufzeit zu kompilieren, werden Zeichenfolgen nicht modulübergreifend internalisiert.

Im folgenden Beispiel werden drei Zeichenfolgen mit dem gleichen Wert verwendet, um zu 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

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft