Evaluar y enviar comentarios
MSDN
MSDN Library
System
 Intern (Método)
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2005/.NET Framework 2.0

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
String.Intern (Método)

Recupera la referencia del sistema al objeto String especificado.

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

Visual Basic (Declaración)
Public Shared Function Intern ( _
    str As String _
) As String
Visual Basic (Uso)
Dim str As String
Dim returnValue As String

returnValue = String.Intern(str)
C#
public static string Intern (
    string str
)
C++
public:
static String^ Intern (
    String^ str
)
J#
public static String Intern (
    String str
)
JScript
public static function Intern (
    str : String
) : String

Parámetros

str

String.

Valor devuelto

Si al valor de str ya se le ha aplicado el método Intern, se devuelve la referencia del sistema; en caso contrario, se devuelve una nueva referencia a una cadena con el valor de str.
Tipo de excepciónCondición

ArgumentNullException

El valor de str es referencia de objeto null (Nothing en Visual Basic).

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 de C#, 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. Como existe una cadena con estas características, el método devuelve la misma referencia que se ha asignado a s1 y, después, esta 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

A partir de la versión 2.0 de .NET Framework, hay un cambio en el comportamiento del método Intern. En la siguiente secuencia de código de C#, a la variable str1 se le asigna una referencia a Empty, a la variable str2 se le asigna una referencia a Empty que devuelve el método Intern y, a continuación, se comparan las referencias que contienen str1 y str2 para comprobar si son iguales.

string str1 = String.Empty;
string str2 = String.Intern(String.Empty);
if ((object) str1) == ((object) str2) …

En la versión 1.1 de .NET Framework, str1 y str2 no son iguales, pero a partir de la versión 2.0 de .NET Framework, str1 y str2 son iguales.

Consideraciones de 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 es debido 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.

En el siguiente ejemplo de código se utilizan 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.

Visual Basic
' Sample for String.Intern(String)
Imports System
Imports System.Text

Class Sample
   
   Public Shared Sub Main()
      Dim s1 As [String] = "MyTest"
      Dim s2 As [String] = New StringBuilder().Append("My").Append("Test").ToString()
      Dim s3 As [String] = [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}", s2 Is s1)
      Console.WriteLine("Is s3 the same reference as s1?: {0}", s3 Is s1)
   End Sub 'Main
End Class 'Sample
'
's1 = 'MyTest'
's2 = 'MyTest'
's3 = 'MyTest'
'Is s2 the same reference as s1?: False
'Is s3 the same reference as s1?: True
'
C#
// 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
*/
C++
// Sample for String::Intern(String)
using namespace System;
using namespace System::Text;
int main()
{
   String^ s1 = "MyTest";
   String^ s2 = (gcnew 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}", s2 == s1 );
   Console::WriteLine( "Is s3 the same reference as s1?: {0}", s3 == 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
*/
J#
// Sample for String.Intern(String)
import System.*;
import System.Text.*;

class Sample
{
    public static void main(String[] args)
    {
        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}", 
            System.Convert.ToString((Object)s2 == (Object)s1));
        Console.WriteLine("Is s3 the same reference as s1?: {0}", 
            System.Convert.ToString((Object)s3 == (Object)s1));
    } //main
} //Sample
/*
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
*/

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 2.0, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2009 Microsoft Corporation. Reservados todos los derechos. Términos de uso | Marcas Registradas | Privacidad
Page view tracker