복식/언 박싱은 object
과 같은 참조 유형을 허용하는 값 유형 (예 : struct, int, long)이 전달 될 때 발생합니다.
값 형식을 전달할 개체 형식의 매개 변수를 사용하는 메서드를 명시 적으로 만들 때 발생합니다. 또한 이전의 비 제네릭 컬렉션을 사용하여 값 유형 (일반적으로 프리미티브)을 저장할 때도 나타납니다.
String.Format()
을 사용하고 기본 요소를 전달할 때 복싱이 표시됩니다. String.Format()
은 params 객체 []를 허용하기 때문에 호출에 추가 매개 변수가 복싱됩니다. 반사 API를 선택의 여지가 없기 때문에 실제 유형이 컴파일시에 알려지지 않은 (그리고 반사 API를 일반 수 없습니다) 이후 object
을 반환하지만 또한 권투/unboxing을 초래할 수있는 방법을 호출 반사를 사용
.
새로운 일반 콜렉션은 boxing/unboxing을하지 않으므로 ArrayList, Hashtable 등과 같이 이전 콜렉션보다 더 좋습니다. 그들은 타입 안전합니다.
개체를 받아들이는 메서드를 변경하여 복싱 문제를 피할 수 있습니다.
public void string Decorate(object a) // passing a value type results in boxing
{
return a.ToString() + " Some other value";
}
대 : 예를 들어
public void string Decorate<T>(T a)
{
return a.ToString() + " some other value";
}
나는 동의합니다. 내가 주제에 관해 읽었던 모든 것에서 나는 단지 요점을 얻지 못한다. 뭔가 빠져 있어야합니다 :) –