2017-04-13 1 views
0

156 문자 메시지를받는 C# winforms .net 4 응용 프로그램을 가지고 있는데이 메시지를 변경하지 않고 여러 함수에 차례로 전달합니다.156 문자 문자열을 여러 함수에 전달

제 질문은 매개 변수와 동일한 값을 계속 전달하는 것이 비효율적입니까 아니면보다 효율적인 방법입니까?

그래서 현재 내가 가진 : 코드의

string code = getTheCode(); 
\\decode first part 
string result1 = getResult1(code); 
string result2 = getResult2(code); 
... 

값이 결코 초기 할당 후 변경되지 않습니다.

+2

문자열은 변경되지 않으므로 변경할 수 없습니다. 참조 클래스이기도하므로 동일한 변수를 매개 변수로 여러 번 사용할 때 복사가 필요하지 않습니다. 마지막으로, 156 문자는 * 작은 * 문자열입니다 –

+0

문자열은 복사되지 않으므로 문자열이 효율적입니다. 본질적으로 포인터를 전달하고 있습니다. – dasblinkenlight

답변

1

대답은 전혀 없습니다. 동일한 문자열을 매개 변수로 계속 전달하는 것은 비효율적이지 않습니다. 문자열에 대한 참조를 전달하기 만하면되므로 매우 효율적입니다.

-1

동일한 코드를 여러 가지 방법으로 계속 전달하는 것은 비효율적 일 수 있습니다. 여러 번 이렇게해야한다는 것을 알게되면 '결과 얻기'를 담당하는 클래스를 만들고 싶을 것입니다. 이 새로운 클래스의 생성자에서 'code'를 전달하십시오. 이 방법을 사용하면 클래스의 수명 동안 '코드'를 다시 사용할 수 있으며 매개 변수와 동일한 값을 계속 전달할 필요가 없습니다.

+0

'code'는 * 문자열 *입니다. 왜 여러 함수 호출에서 같은 문자열 값을 사용하는 것이 비효율적입니까? 그리고 문자열 도움말 위에 * 다른 클래스를 어떻게 도입할까요? –

+0

인자로 같은 문자열을 요구하는 많은 메소드가 있다면 아마도 결과를 가져 오는 클래스를 원할 것입니다. 물론 문자열을 여러 함수에 전달할 수 있습니다. 그러나 동일한 문자열을 여러 함수에 전달하는 것은 너무 많은 책임이있는 클래스를 만드는 것처럼 들립니다. –

0

문자열을 인수로 전달해야하는 생성자로 클래스를 만들 수 있습니다 개인 재산으로 설정하십시오. 그런 다음이 개인 속성을 사용하여 결과를 계산하는 메서드를 사용하여 데이터를 검색 할 수 있습니다.

하지만 이것은 선호하는 코딩 스타일의 문제 일뿐입니다 (물론 하나 이상의 장소에서 이러한 방법을 사용할지 여부). 나에게 더 읽기 쉽고 ResultGetter 클래스의 인스턴스에서 코드 변수가 변경되지 않도록해야한다.

public class ResultGetter 
{ 
    private readonly string _code; 

    public ResultGetter(string code) 
    { 
     _code = code; 
    } 

    public string GetResult1() 
    { 
     var returnValue = // do something with _code property  
     return returnValue; 
    } 

    public string GetResult2() 
    { 
     var returnValue = // do something with _code property 
     return returnValue; 
    } 

    // et cetera ad nauseam 
} 

그리고 메인 파일에

:

var code = getTheCode(); 
var rg = new ResultGetter(code); 
string result1 = rg.GetResult1(); 
string result2 = rg.GetResult2(); 
+0

좀 더 자세한 정보를 제외하면 어떻게 원래의 것과 다를 것입니까? 필드 액세스 또는 매개 변수 액세스는 동일합니다. 문자열은 참조 클래스입니다. 지나간 유일한 것은 포인터입니다. 문자열 위에 다른 클래스를 추가하면 하나가 아닌 GC에 두 개의 객체가 생깁니다. –

+0

길을 볼 수 있습니다. 자세한 내용은 더 자세히 읽을 수 있고 코딩 기본 설정의 문제입니다. 확실히 OP의 방법과 제가 선호하는 방법의 대안입니다. 그것은 OP가 사용하는 것보다 거의 효율적이지 않습니다. – schroedingersKat