Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

String.Intern (Método)

Recupera la referencia del sistema al objeto String especificado.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

public static string Intern(
	string str
)

Parámetros

str
Tipo: System.String
Una cadena que se va a buscar en el grupo de internos.

Valor devuelto

Tipo: System.String
Referencia del sistema a str si se le ha aplicado el método Intern; de lo contrario, una nueva referencia a una cadena con el valor de str.

ExcepciónCondición
ArgumentNullException

str es null.

Common Language Runtime conserva el almacenamiento de cadenas mediante el mantenimiento de una tabla (denominada agrupación interna) que contiene una sola referencia a cada cadena literal única declarada o creada mediante programación en el programa. Como consecuencia, una instancia de una cadena literal con un valor determinado sólo existe una vez en el sistema.

Por ejemplo, si se asigna la misma cadena literal a varias variables, el motor en tiempo de ejecución recupera la misma referencia a la cadena literal a partir de la agrupación interna y asigna esta referencia a cada variable.

El método Intern utiliza la agrupación interna para buscar una cadena que sea igual al valor de str. Si existe una cadena con estas características, se devuelve su referencia en la agrupación interna. Si esta cadena no existe, se agrega a la agrupación interna una referencia a str y, después, se devuelve la referencia.

En el siguiente ejemplo, ya se ha aplicado el método Intern a la cadena s1, que tiene un valor de "MyTest", porque se trata de un literal del programa. La clase System.Text.StringBuilder genera un nuevo objeto de cadena que tiene el mismo valor que s1. A la cadena s2 se le asigna una referencia a dicha cadena. El método Intern busca una cadena que tenga el mismo valor que s2. Dado que este tipo de cadena existe, el método devuelve la misma referencia que está asignada a s1. A continuación, esa referencia se asigna a s3. Las referencias s1 y s2 son distintas porque hacen referencia a objetos distintos, mientras que las referencias s1 y s3 son iguales porque hacen referencia a la misma cadena.


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.


Compare este método con el método IsInterned.

Consideraciones de versión

En .NET Framework 3.5 Service Pack 1, el método de Intern revierte a su comportamiento en .NET Framework 1,0 y 1,1 con respecto al proceso la cadena vacía. En el ejemplo siguiente, se asigna a la variable str1 una referencia a Empty y se asigna a la variable str2 la referencia a Empty que se devuelve llamando al método Intern después de convertir en una cadena un objeto StringBuilder cuyo valor es Empty. A continuación, se comparan las referencias contenidas en str1 y str2 para ver si son iguales.


		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.");


En .NET Framework 1.0, .NET Framework 1.1, y .NET Framework 3.5 SP1, str1 y str2 son iguales. En .NET Framework 2.0 Service Pack 1 y .NET Framework 3.0, str1 y str2 no son iguales.

Consideraciones sobre el rendimiento

Si intenta reducir la cantidad total de memoria que la aplicación asigna, tenga en cuenta que la aplicación del método Intern a una cadena tiene dos efectos secundarios no deseados. Primero, no es probable que la memoria asignada para los objetos String a los que se ha aplicado el método Intern se libere hasta que finaliza Common Language Runtime (CLR). Esto se debe a que la referencia de CLR al objeto String al que se ha aplicado el método Intern puede persistir después de que la aplicación, o incluso el dominio de aplicación, finalice. En segundo lugar, para aplicar el método Intern a una cadena, es preciso crear primero la cadena. La memoria utilizada por el objeto String debe mantenerse asignada, aunque sea recogida durante la recolección de elementos no utilizados.

La versión 2.0 de .NET Framework introduce el miembro de la enumeración CompilationRelaxations.NoStringInterning. El miembro de NoStringInterning marca un ensamblado especificando que no es necesario realizar el proceso interning relacionado con el literal de cadena. Puede aplicar NoStringInterning a un ensamblado utilizando el atributo CompilationRelaxationsAttribute. Además, si usa el Ngen.exe (Generador de imágenes nativas) para compilar un ensamblado antes del tiempo de ejecución, las cadenas no se asignarán al grupo interno de cadenas.

En el siguiente ejemplo se usan tres cadenas con el mismo valor para determinar si son iguales una cadena recién creada y una cadena a la que se ha aplicado el método Intern.


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

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

.NET para aplicaciones de Windows Phone

Compatible con: 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 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft