Console.WriteLine () 및 너무 많은 인수 오버로드가 필요하십니까?
를 살펴보면서 설명서 Console.WriteLine()
메서드에 여러 over-로드가 있음을 알았 습니다. 특히 저의 호기심과 부분적인 혼란은 다음과 관련이 있습니다.
public static void WriteLine(string format, params object[] arg);
public static void WriteLine(string format, object arg0);
public static void WriteLine(string format, object arg0, object arg1);
public static void WriteLine(string format, object arg0, object arg1, object arg2);
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3);
더 된 것입니다. 첫 번째 추가 외 다른 4 개의 추가가 필요 확장입니까? 첫 번째 방법은 다른 방법이 할 수있는 모든 것을 할 수 있습니다. 최대 4 개의 인수 (마지막 인수)를 처리하는 추가 처리하려는 성능 오버로드를 제공합니까? 최대 4 개의 인수 배열을 통과하는 오버 헤드가 다음 오버로드에 대한 요구를 할만 큼 충분히 큰가요?
일반적으로 첫 번째 입체가 다른 입체에 충분할 수있는 것이 맞습니다. 그러나 params
메소드 그룹 바인딩과 같은 간접적 인 경우에는 키워드를 사용할 수 없기 때문에 엄격하게 사실이 아닙니다 . 예를 들면
delegate void E(string format, object o1);
E e = Console.WriteLine;
params
특정 적합하지 않을 때 적합하지 않습니다.
public static void WriteLine(string format, object arg0);
그래도 꽤 난해한 경우입니다. 더 중요한 이유는 다음과 가변적입니다.
params
키워드 를 지원하는 데 모든 CLI 언어가 필요하지 않습니다 . 수동으로 호출을 생성하기 위해 간단한 WriteLine을 호출 할 필요가있는 언어에 대한 부담이 있습니다.- 공연.
params
오버로드를 호출하면 컴파일러에 의해 암시 적으로 수행 된 경우에도 호출자가 배열을 할당하도록합니다. 할당은 .Net에서 성능하지만 무료는 아닙니다. 이와 같은 작은 것들은 특히Console.WriteLine
. 다른 경우에 있다면 기존에 할당을 피할 수 있습니다.
오버로드는 params 키워드가없는 C ++ / CLI 프로그램의 편의를위한 것입니다.
여러분 모두는 C # 2.0에서 매개 변수가 도입되는 사실을 잊고 생각합니다. 따라서 params 키워드가없는 경우 .NET 1.1에서 오버로드가 발생합니다.
나는 JaredPar 와 jaket 의 훌륭하고 설명적인 답변을 가지고 생각 하지만 한 가지 생각하는 질문이 이미 있습니다.
사용자 가 필요에 따라 위의 기능을 사용 하기 위하여 자유로울 수있는 것이 생각합니다 . 어레이를 생성 할 때보 다 훨씬 더 편리합니다.
나는 C #을 배우기 시작했을 때 배열을 거의 사용하지 않을 때 발생 하는 배열 을 사용하는 것이 나에게 복잡한 작업이라고 생각합니다. 배열을 할당하고 적절한 값으로 초기화하는 것은 복잡하고 시간이 많이 많이 있습니다.
이것은 실제로 성능 문제가 아닙니다. 그러나 유용성은 그 타당한 이유입니다.
아래 코드는 작은 규모를 제공합니다.
public class TipCalculator {
private const double tipRate = 0.18;
public static int Main(string[] args) {
double billTotal;
if (args.Length == 0) {
Console.WriteLine("usage: TIPCALC total");
return 1;
}
else {
try {
billTotal = Double.Parse(args[0]);
}
catch(FormatException) {
Console.WriteLine("usage: TIPCALC total");
return 1;
}
double tip = billTotal * tipRate;
Console.WriteLine();
Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
Console.WriteLine(("").PadRight(24, '-'));
Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
return 0;
}
}
}
자세한 내용은 http://msdn.microsoft.com/en-us/library/aa324774(v=vs.71).aspx 링크 를 참조하십시오.
'IT' 카테고리의 다른 글
Java에서 정수 나누기 (0) | 2020.09.14 |
---|---|
Column에 Cell 값이 있는지 확인한 다음 NEXT Cell의 값을 가져옵니다. (0) | 2020.09.14 |
Git Gui에 "당기기"가 없습니까? (0) | 2020.09.14 |
사용자가 뒤로 버튼을 사용하여 페이지로 이동했는지 여부를 감지합니까? (0) | 2020.09.14 |
내 로컬 저장소를 git-pull에 사용하려면 어떻게해야합니까? (0) | 2020.09.14 |