이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

String.Intern 메서드 (String)

 

지정된 String에 대한 시스템의 참조를 검색합니다.

네임스페이스:   System
어셈블리:  mscorlib.dll의 mscorlib

public static string Intern(
	string str
)

매개 변수

str

내부 풀에서 검색할 문자열입니다.

반환 값

Type: System.String

str이 내부 풀에 추가되었으면 해당 시스템 참조이고, 그렇지 않으면 str 값을 가진 문자열에 대한 새 참조입니다.

Exception Condition
ArgumentNullException

strnull인 경우

공용 언어 런타임 선언 또는 프로그램에서 프로그래밍 방식으로 만든 각 고유 리터럴 문자열에 대 한 단일 참조를 포함 하는 내부 풀 이라는 테이블을 유지 하 여 문자열 저장소를 절약 합니다.따라서 특정 값을 가진 리터럴 문자열의 인스턴스만 한번 시스템에 존재 합니다.

예 여러 변수에 같은 리터럴 문자열을 할당 하는 경우 런타임에 내부 풀에서 리터럴 문자열에 동일한 대 한 참조를 검색 및 각 변수에 할당 합니다.

Intern 메서드는 내부 풀의 값과 같은 문자열을 검색을 사용 하 여 str합니다.이러한 문자열에 있는 경우에 내부 풀에 해당 참조가 반환 됩니다.문자열이 없는 경우에 대 한 참조 str 반환 되 고 참조 하는 내부 풀에 추가 됩니다.

다음 예제에서는 "MyTest"의 값이 문자열 s 1은 이미 내부 풀에 추가 프로그램의 리터럴 이기 때문에 있습니다. System.Text.StringBuilder 클래스에는 s 1과 동일한 값을 가진 새 문자열 개체를 생성 합니다.이 문자열에 대 한 참조는 s2에 할당 됩니다. Intern s 2와 동일한 값을 가진 문자열에 대 한 메서드를 검색 합니다.이러한 문자열 존재 하기 때문에 메서드는 s 1에 할당 된 동일한 참조를 반환 합니다.참조 하는 s3에 할당 됩니다.참조 s 1과 s 2 같지 않은 다른 개체를 참조 하므로 참조 s1 및 s 3을 동일한 문자열로 참조 때문에 같다고 간주 합니다.

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, Intern 메서드는.NET Framework 1.0 및 1.1 빈 문자열 인터닝와 관련 하 여 해당 동작으로 돌아갑니다.다음 예에서 변수 str1 에 대 한 참조를 할당 된 Empty, 변수 및 str2 에 대 한 참조를 할당 된 Empty 호출 하 여 반환 되는 Intern 변환한 후 메서드는 StringBuilder 값을 가진 개체 Empty 문자열로.에 포함 된 참조에 다음 str1str2 서로 같은지 비교 합니다.

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 SP1, str1str2 같은지 합니다. 에 .NET Framework 2.0 서비스 팩 1 및 .NET Framework 3.0, str1str2 같지 않습니다.

총 메모리 양을 줄일 하려고 하는 경우 응용 프로그램 할당, 염두에 문자열 인터닝 두 원치 않는 부작용입니다.내부 풀에 추가 대 한 메모리가 할당 하는 첫째, String 개체는 가능성이 릴리스되지 공용 언어 런타임 (CLR) 종료 될 때까지입니다.이유는는 풀에 대 한 참조를 CLR의 String 개체 후 응용 프로그램 또는 사용자 응용 프로그램 도메인을 유지할 수, 종료 됩니다.둘째, 문자열을 내부 화를 먼저 만들어야 합니다 문자열입니다.사용 하는 메모리는 String 개체 해야 여전히를 할당할 수 있지만 메모리 가비지 수집 됩니다.

.NET Framework 버전 2.0에서 소개 된 CompilationRelaxations.NoStringInterning 열거형 멤버입니다. NoStringInterning 멤버 문자열 리터럴 인터닝 필요 하지 않은 어셈블리를 표시 합니다.적용할 수 NoStringInterning 를 사용 하 여 어셈블리에는 CompilationRelaxationsAttribute 특성입니다.사용 하는 경우에,는 Ngen.exe(네이티브 이미지 생성기) 런타임 이전 어셈블리를 컴파일하려면 문자열은 모듈 간에 풀 되지 않습니다.

다음 예제에서는 새로 만든된 문자열과 하는지 여부를 결정 하는 값과 동일한 3 개의 문자열을 사용 하 고는 풀된 문자열이 같은 경우.

// 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 이후에 사용 가능
맨 위로 이동
표시: