2009-08-10 4 views
0

질문을 명확하게하는 방법을 모르겠지만 근본적으로 문제입니다.재정의 된 ToString 함수에서 복합 문자열을 반환하려면 어떻게해야합니까?

나는 내 수업 중 다른 수업에서 만난 수업을 가지고 있습니다. 기본 클래스에는 재정의 된 Tostring 함수가 있습니다 (콜론으로 구분 된 2 개의 문자열을 반환합니다).

문제는 파생 클래스가 문자열 배열 또는 하나의 문자열을 가질 수 있으므로 ToString 함수를 재정의 할 때 기본 클래스와 문자열 배열 ("\ n")를 파생 클래스에 추가합니다. 지금 나는 이것을하기위한 가장 좋은 방법이 무엇인지 궁금합니다. 문자열 배열을 반환해야합니까 (가능한 경우) 또는 Stringbuilder 클래스를 사용하지만 선택의 여지가 있습니까? 이렇게하는 또 다른 방법이 있다면 .. 말 해주세요. 모든 아이디어가 얼마나 미친 지 상관없이 환영합니다 :)

답변

12

ToString을 재정의 할 때 이 있으면 문자열이 반환됩니다. 다른 유형은 반환 할 수 없습니다. 그것은 당신이 이런 식으로 뭔가를 할 수 있습니다 같은 소리 :

base1:base2 
this1 
this2 
this3 

라인 구분이 \n을 어디에 : 당신은 같은 문자열을 반환 할 가정 것

public override ToString() 
{ 
    return base.ToString() + "\n" + string.Join("\n", stringArray); 
} 

.

+0

고맙습니다. –

+0

ToString() 구현이 일반적으로 예외 중 하나가되지 않는 특별한 요구 사항이 없으면 분리 기호에'Environment.NewLine'을 사용해야합니다. :) –

+0

문자열의 "사양"옆에 있습니다. 나는 당신의 추천에 동의하는지조차 모르겠다. 그것은 'Encoding.Default'를 사용하는 것과 같다. 문자열이 어디에서 사용되는지 알지 못하면 아무도 올바른 줄 종결자가 무엇인지 알 수 없습니다. –

0

기본 클래스의 ToString() 반환 값을 사용할 수 있습니다.

당신은) (

base.ToString하여 액세스 할 수 있습니다;

1

디자인에 결함이있는 것처럼 보이지만, 말한대로 ToString() 메서드에서 문자열 배열을 반환 할 방법이 없습니다. 따라서 기본 클래스의 ToString() 반환 값을 파생 클래스로 구분해야합니다.

이러한

public override string ToString() 
{ 
    return base.ToString() + ':' + "whatever"; 
} 
2

와 같이 "기본 클래스뿐만 아니라 문자열의 배열을 반환"무엇을 의미합니까? 당신이 기본 클래스의 toString() 메서드를 의미하는 경우

당신은 시도 할 수 :

base.ToString() + "\n" + String.Join("\n", theStringArray); 
+0

내가 파생 클래스에서 문자열 배열뿐만 아니라 기본 클래스 'ToString 메서드를 반환하는 의미 –

1

앙리가 언급 한 바와 같이, base.ToString를 (반환) 다음은 \ n 문자열을 사용하여 콜론을 대체 할 수 . 바꾸어서 새로 파생 된 문자열과 결합하십시오.

물론 파생 클래스에서 "string \ n string"형식의 문자열을 사용할 수 있으며 ToString 함수에서 단순히 바꾸기 단계를 수행 한 다음 두 문자열을 함께 결합합니다. 배열이 없으며 stringbuilder가 필요하지 않습니다. 함께 쓰려는 문자열 값이 낮을 것이라고 생각하면 가장 간단한 옵션 일 수 있습니다. 배열이나 stringbuilder가 없습니다.

1

일반적으로 긴 작업 행을 사용하여 문자열을 연결하는 것보다는 Stringbuilder를 사용하는 것이 좋습니다.

다음 작업을 수행 할 경우이 실제로 메모리에 7 개 문자열이 생성됩니다

string sTemp = "This i" + "s an exa" + "ple string tha" + "t was broken."; 

.

  1. "이것은 I"
  2. "이것은 EXA는" "는 EXA S"
  3. "는 PLE이"
  4. "t"이 예시 문자열 그쪽 " 부러졌다. "
  5. "이것은 깨진 예제 문자열입니다."

동일한 기능의 모두 StringBuilder의 사용은 다섯을 만들 것이며, 규모가가는대로 모두 StringBuilder는 단순히 후 + 연산자를 하나의 무리를 실행하는 것보다 이러한 모든 문자열을 연결의 빠른 일을 할 것입니다 다른.

문자열 개체 배열과 마찬가지로 연결 목록이 미리 결정되지 않은 경우 특히 그렇습니다.

관련 문제