.NET Framework에는 메서드에 대한 오버로드가 여러 개 있으며 그 중 일부는 특정 개수의 매개 변수를 사용하여 마지막 "catch" 모두 "params
키워드가 사용됩니다. 이것의 일반적인 예로는 나는이 방법 과부하의 많은 존재 이유에 대한 특별한 이유가 있는지 궁금 해서요 String
클래스 예컨대 :C에서 특정 인수와 params 메서드 오버로드를 모두 갖는 이점 C#
에있다? 처음에는 그것이 공연과 관련이있을 것이라고 생각했습니다. 이 질문에 대한 질문과 대답은 Cost of using params in C#입니다.
그러나 Reference Source 웹 사이트를 사용하여. NET 소스 코드에 대해 알아보기 시작했습니다. String class source code에서 이것을 알아 냈습니다 :
String.Concat()
은 실제로 사용되는 고정 인수의 수에 따라 다른 코드가 실행됩니다. 이것은 내 마음에 확실히 최적화 될 것입니다.
public static String Format(String format, Object arg0)
{
return Format(format, new Object[] { arg0 });
}
public static String Format(String format, Object arg0, Object arg1)
{
return Format(format, new Object[] { arg0, arg1 });
}
public static String Format(String format, Object arg0, Object arg1, Object arg2)
{
return Format(format, new Object[] { arg0, arg1, arg2 });
}
public static String Format(String format, params Object[] args)
{
// Do work here...
}
그래서 성능 이점이 있습니다 또는이 단순히 편의상의 문제 일 수있다, 아니면 둘 다 다음 부연 코드를 아래 참조 - String.Format()
그러나 단지 주요 param
방법 래퍼를 제공하는 것? 위의 특별한 경우에는 분명한 이점이 없으며 단지 작업을 복제하는 것처럼 보입니다.
각 호출자에 IL의 몇 바이트를 저장하므로 배열을 할당하고 초기화 할 필요가 없습니다. –
@MichaelLiu 그러나 * 여기에 배열을 할당하고 초기화하는 중입니다. 외부의 대신에 새로운 방법으로 수행합니다. – Servy
@Servy : 각 호출자에 IL의 몇 바이트를 저장합니다. 즉, 각 호출 사이트에서 컴파일러는 인수를 푸시하기위한 지시 만 내 보내면됩니다. 전용 과부하가 없으면 컴파일러는 배열을 할당하고 초기화하는 명령을 내 보내야합니다. –