Intern Метод (String)
TOC
Свернуть оглавление
Развернуть оглавление
Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

String.Intern - метод (String)

 

Извлекает системную ссылку на указанный объект String.

Пространство имен:   System
Сборка:  mscorlib (в mscorlib.dll)

public static string Intern(
	string str
)

Параметры

str

Строка для поиска в пуле интернирования.

Возвращаемое значение

Type: System.String

Системная ссылка на значение str, если оно уже интернировано; в противном случае возвращается новая ссылка на строку со значением str.

Exception Condition
ArgumentNullException

str равен null.

Общеязыковая среда выполнения экономит пространство для хранения строк ведя таблицу, называемую пулом интернирования, которая содержит по одной ссылке на каждый уникальный строковый литерал, объявленный или созданный в программе.Следовательно экземпляр строкового литерала с конкретным значением существует только один раз в системе.

Например если несколько переменных можно назначить тот же строковый литерал, среда выполнения получает же ссылка на строковый литерал из пула intern и присваивает каждой переменной.

Intern Метод использует пул интернирования для поиска строки, равное значению str.Если такая строка существует, возвращается его ссылка в пуле intern.Если строка не существует, ссылку на str добавляется intern пула, а затем эта ссылка возвращается.

В следующем примере строка s1 имеет значение «MyTest», уже интернирована, так как она является литералом в программе. System.Text.StringBuilder Класс создает новый объект string, которое совпадает со значением s1.Ссылка на эту строку присваивается s2. Intern Метод ищет строку, совпадает со значением s2.Поскольку такая строка существует, метод возвращает ту же ссылку, которая присвоена s1.Эта ссылка затем присваивается s3.Ссылки s1 и s2 не считаются равными, так как они указывают на разные объекты; Ссылки s1 и s3 считаются равными, поскольку они ссылаются на ту же строку.

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.

Этот метод, чтобы сравнить IsInterned метод.

В .NET Framework 3.5 с пакетом обновления 1 (SP1), Intern метод возвращается к его поведение в .NET Framework версии 1.0 и 1.1 с учетом изоляция пустая строка.В следующем примере переменная str1 назначается ссылку на Empty, и переменная str2 присваивается ссылка Empty возвращается путем вызова Intern метод после преобразования StringBuilder объект, значение которого равно Empty в строку.Затем ссылки, содержащиеся в str1 и str2 Сравнение на равенство.

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

В .NET Framework 1.0, .NET Framework 1.1, и .NET Framework 3,5 с пакетом обновления 1 (SP1), str1 и str2 равны. В .NET Framework 2.0 с пакетом обновления 1 (SP1) и .NET Framework 3.0, str1 и str2 не равны.

Если вы пытаетесь сократить общий объем памяти выделяет ваше приложение, имейте в виду, с изоляцией строка нежелательных побочных эффектов. Во-первых, память, выделенная для интернированых объектов String, скорее всего, не будет высвобождена вплоть до завершения общеязыковой среды выполнения (CLR). Причина в том, что ссылка на интернированный объект String в среде CLR может сохраняться после завершения приложения или даже домена приложения. Во-вторых для интернирования строки, необходимо сначала создать строку. Объем памяти, используемой объектом String, по-прежнему назначается, несмотря на то, что память в конечном счете будет собрана как мусор.

Платформа .NET Framework версии 2.0 появился CompilationRelaxations.NoStringInterning члена перечисления. NoStringInterning Элемент помечает сборку как не требующий строковых литералов.Можно применить NoStringInterning в сборку с помощью CompilationRelaxationsAttribute атрибута.Кроме того, при использовании Ngen.exe (генератор образов в машинном коде) для компиляции сборки до времени выполнения, строки не интернировано между модулями.

В следующем примере три строки, которые равны по значению, чтобы определить, является ли вновь созданная и интернированная строки равны.

// 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
Доступно с 1.1
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Вернуться в начало
Показ:
© 2016 Microsoft