검색에서 답변을 찾을 수 없지만 올바른 방법을 묻지 않고 있습니다. 나는 (1D-2D 들쭉날쭉 한 배열의 형태로) 3D 행렬을 취하고 요소에 대한 함수를 수행하는 많은 행렬 형식 함수가있는 프로그램을 가지고 있습니다. 그러나 나는 종종 동일한 함수를 사용해야하지만, 형식이 다른 인수 인 int [] [,]와 float [] [,] 및 double [] [,]을 사용해야합니다.여러 유형의 변수에 대해 메소드를 간단하게 오버로드하는 방법은 무엇입니까?
지금까지 동일한 방법을 사용했지만 형식을 변경했지만 지금까지 수 많은 항목이 있지만 "다시 형식화 된"방법을 다시 작성하는 것은 정말 고통 스럽습니다.
private float SomeFunctionA(float[][,] d)
{
float sum = 0;
for (int k = 0; k < d.GetLength(0); k++)
for (int j = 0; j < d[0].GetLength(1); j++)
for (int i = 0; i < d[0].GetLength(0); i++)
sum += d[k][i,j];
return SomeFunctionB(sum);
}
private float SomeFunctionA(double[][,] d)
{
double sum = 0;
for (int k = 0; k < d.GetLength(0); k++)
for (int j = 0; j < d[0].GetLength(1); j++)
for (int i = 0; i < d[0].GetLength(0); i++)
sum += d[k][i,j];
return SomeFunctionB(sum);
}
다른 유형을 허용하는 더 쉬운 방법이 있습니까? 기능 (예 : 루프 및 기타 본문 코드 3 개)이있는 일반 기본 메소드를 보유한 다음 다른 유형을 사용하고 각 사례에 대해 일반 메소드를 호출하는 헬퍼 메소드가있는 방법이 있으면 좋을 것입니다.
감사합니다.
Alexei의 다른 솔루션을 참조하십시오.이 솔루션은 위임자가이 코드를 상당히 적은 코드로 처리합니다. 또한 대답에서 말한 것처럼 두 가지 솔루션 모두 상당히 낮은 성능의 비용을 추가합니다. 이러한 비용은 이러한 저수준 수학 연산에 적합하지 않을 수 있습니다. – Servy
@Servy 예 동의합니다. 그러나 '이 솔루션의 경우 몇 가지 클래스를 만들 수 있지만이 경우 모든 연산자 (+뿐만 아니라)도 지원할 수 있습니다.' Math.Abs 함수를 -, /, * 연산자로 사용해야하는 경우 많은 집계자를 전달해야합니다. –
@Serve 함수 호출에 대한 좋은 지적. 나는 그것이 성과를 해칠 수도 있지만 동의하는 데 메티오스의 숫자에 depens 동의합니다. –