Exportar (0) Imprimir
Expandir Tudo
Expandir Minimizar
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Método String.Intern

Recupera referência do sistema de para o especificado String.

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

public static string Intern(
	string str
)

Parâmetros

str
Tipo: System.String
A String.

Valor de retorno

Tipo: System.String
Se o valor de str é já interned, referência do sistema de é retornada; caso contrário, uma nova referência para uma seqüência de caracteres com o valor de str será retornado.

ExceçãoCondição
ArgumentNullException

str é null.

O Common linguagem tempo de execução preserva string armazenamento mantendo uma tabela, o pool estagiário, que contém uma referência única para cada seqüência literal exclusiva declarado ou criado por programação em seu programa de chamada.Conseqüentemente, uma instância de uma seqüência de caracteres literal com um determinado valor existe somente uma vez no sistema.

Por exemplo, se você atribuir a mesma seqüência de caracteres literal a diversas variáveis, o tempo de execução recupera a mesma referência à seqüência literal do pool estagiário e atribui a cada variável.

The Intern método usa o pool estagiário para procurar uma seqüência de caracteres igual ao valor de str. Se existir uma seqüência de caracteres, sua referência no pool estagiário será retornada.Se a seqüência de caracteres não existir, uma referência a str é adicionado ao pool estagiário, essa referência será retornado.

No exemplo a seguir, s1 seqüência de caracteres, que tem um valor de "MyTest", já é interned porque é um literal no programa.The System.Text.StringBuilder CLsistema autônomos gera um novo objeto de seqüência de caracteres que h sistema autônomo o mesmo valor sistema autônomo s1. Uma referência a essa seqüência é atribuída a s2.The Intern método procura uma seqüência que tenha o mesmo valor % s2. Como existe uma seqüência de caracteres, o método retorna a mesma referência atribuído ao s1.Essa referência é então atribuída à s3.Referências de s1 e s2 comparam desigual porque eles se referem a objetos diferentes; referências s1 e s3 comparam igual porque eles se referem a mesma seqüência de caracteres.

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.

comparar esse método para o IsInterned método.

Considerações sobre versão

No .NET Framework versão 3,5 Service Pack 1, o Intern método será revertido para seu comportamento na .NET Framework versão 1,0 e .NET Framework versão 1,1 com relação ao interning a seqüência de caracteres vazia. No exemplo a seguir, a variável str1 é atribuída uma referência para Emptye a variável str2 é atribuído a referência para Empty que é retornado pela chamada a Intern método após converter um StringBuilder objeto cujo valor é Empty em uma seqüência de caracteres. Em seguida, as referências contidas em str1 e str2 são comparados igualdade.

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


No .NET Framework 1.0, .NET Framework 1,1, e .NET Framework 3.5 SP1, str1 e str2 não são iguais. No .NET Framework versão 2.0 Service Pack 1 e .NET Framework versão 3,0, str1 e str2 são iguais.

Considerações sobre desempenho

Se você está tentando reduzir a quantidade total de memória aloca seu aplicativo, tenha em mente que uma string interning tem dois efeitos colaterais indesejados.Primeiro, a memória alocada para interned String objetos não será provavelmente ser lançada até que o common linguagem tempo de execução (CLR) encerra. O motivo é que a referência do CLR à interned String objeto pode persistir depois de seu aplicativo ou até mesmo seu domínio do aplicativo, termina. Segundo, para intern uma seqüência de caracteres, você deve primeiro criar a seqüência de caracteres.A memória usada pelo String objeto ainda deve ser alocado, mesmo que a memória, eventualmente, serão coletados pelo lixo.

O .NET estrutura versão 2.0 introduz o CompilationRelaxations.NoStringInterning membro de enumeração. The NoStringInterning membro marca um assembly sistema autônomo não exigindo interning seqüência literal. Você pode aplicar NoStringInterning para um assembly usando o CompilationRelaxationsAttribute atributo. Além disso, quando você usa o Nativo Gerador de Imagem (Ngen.exe) para compilar um assembly antes do time de execução, seqüências de caracteres não são interned em módulos.

O exemplo de código a seguir utiliza três cadeias de caracteres são iguais no valor para determinar se uma seqüência de caracteres recém-criada e uma seqüência de caracteres interned são iguais.

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

class Sample {
    publicstaticvoid 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
*/
// 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 Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

o.NET Framework e.NET Compact Framework não oferecem suporte a todas as versões de cada plataforma. Para obter uma lista de versões suportadas, consulte Requisitos de sistema do .NET framework.

.NET Framework

Compatível com: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatível com: 3.5, 2.0, 1.0

XNA Framework

Compatível com: , 1.0


Data

História

Motivo

Julho de 2008

Adicionado a uma discussão do comportamento do método no .NET Framework 3.5 SP1 a seção de considerações sobre a versão.

Correção de bug do conteúdo.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft