Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Metodo String.Intern

Recupera il riferimento del sistema all'oggetto String specificato.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public static string Intern(
	string str
)

Parametri

str
Tipo: System.String
Stringa da cercare nel pool interno.

Valore restituito

Tipo: System.String
Riferimento del sistema a str se è inserito. In caso contrario, nuovo riferimento a una stringa con il valore di str.

EccezioneCondizione
ArgumentNullException

str è null.

Common Language Runtime gestisce l'archiviazione delle stringhe mediante una tabella, denominata pool interno, che contiene un riferimento singolo a ciascuna rappresentazione formale di stringa univoca, dichiarata o creata a livello di programmazione nel programma. Pertanto, un'istanza di una rappresentazione formale di stringa con un determinato valore è presente una sola volta nel sistema.

Se, ad esempio, la stessa rappresentazione formale di stringa viene assegnata a variabili diverse, il runtime recupererà dal pool interno lo stesso riferimento alla rappresentazione formale di stringa e lo assegnerà a ciascuna variabile.

Il metodo Intern utilizza il pool interno per cercare una stringa uguale al valore del parametro str. Se la stringa è presente, verrà restituito il relativo riferimento contenuto nel pool interno. In caso contrario, al pool interno verrà aggiunto un riferimento al parametro str, che verrà quindi restituito.

Nell'esempio riportato di seguito, la stringa s1, con valore "MyTest", è già inserita poiché si tratta di un valore letterale presente nel programma. La classe System.Text.StringBuilder genera un nuovo oggetto stringa con lo stesso valore di "s1". Un riferimento a questa stringa viene assegnato a "s2". Il metodo Intern cerca una stringa che abbia lo stesso valore di "s2". Dal momento che una simile stringa esiste, il metodo restituisce lo stesso riferimento assegnato a s1. Tale riferimento viene quindi assegnato a s3. I riferimenti s1 e s2 risultano diversi poiché si riferiscono a oggetti diversi; i riferimenti s1 e s3 risultano uguali poiché si riferiscono alla stessa stringa.


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.


Confrontare questo metodo al metodo IsInterned.

Considerazioni sulle versioni

In .NET Framework 3.5 Service Pack 1, viene ripristinato il comportamento del metodo Intern presente in .NET Framework 1.0 e 1.1 relativamente all'inserimento della stringa vuota. Nell'esempio seguente, alla variabile str1 viene assegnato un riferimento a Empty, mentre alla variabile str2 viene assegnato il riferimento a Empty restituito mediante la chiamata al metodo Intern dopo aver convertito un oggetto StringBuilder con valore Empty in una stringa. Successivamente, i riferimenti contenuti in str1 e str2 vengono confrontati per verificarne l'uguaglianza.


		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, .NET Framework 1.1 e .NET Framework 3.5 SP1, str1 e str2 sono uguali. In .NET Framework 2.0 Service Pack 1 e .NET Framework 3.0, str1 e str2 non sono uguali.

Considerazioni sulle prestazioni

Se si tenta di ridurre la capacità di memoria complessiva allocata dall'applicazione, tenere presente che l'inserimento di una stringa presenta due effetti collaterali indesiderati. In primo luogo, è improbabile che la memoria allocata per oggetti String inseriti venga rilasciata finché Common Language Runtime (CLR) non termina. Il motivo è che il riferimento del CLR all'oggetto String inserito può persistere anche dopo il termine dell'applicazione o persino del dominio applicazione. Il secondo effetto collaterale è che per inserire una stringa è necessario prima crearla. La memoria utilizzata dall'oggetto String deve essere comunque allocata, anche se la memoria verrà alla fine sottoposta alla procedura di Garbage Collection.

In .NET Framework versione 2.0 viene introdotto il membro di enumerazione CompilationRelaxations.NoStringInterning. Il membro NoStringInterning contrassegna un assembly come assembly che non necessita di inserimento di stringhe letterali. È possibile applicare il membro NoStringInterning a un assembly utilizzando l'attributo CompilationRelaxationsAttribute. Inoltre, quando si utilizza il Ngen.exe (generatore di immagini native) per compilare un assembly prima della fase di esecuzione, le stringhe non vengono inserite tra i moduli.

Nell'esempio riportato di seguito vengono utilizzate tre stringhe di uguale valore per determinare se una stringa appena creata e una stringa inserita risultano uguali.


// 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

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

.NET per applicazioni Windows Phone

Supportato 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 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft