문제

ToString () 메소드를 갖고 싶은 공개 정적 클래스가 있습니다.

공개 정적 문자열 tostring ()로 정의했지만 다음 경고를받습니다.

'class.toString ()'상속 된 멤버 '개체를 숨 깁니다 .toString ()'. 현재 멤버가 해당 구현을 재정의하도록하려면 재정의 키워드를 추가하십시오. 그렇지 않으면 새 키워드를 추가하십시오.

재정의 키워드를 추가하면 대신이 오류가 발생합니다.

정적 멤버 'class.toString ()'는 재정의, 가상 또는 초록으로 표시 될 수 없습니다.

그 경고를 제거하고 내 정적 클래스에 tostring () 메소드를 갖도록하려면 어떻게해야합니까?

고맙습니다,
키이스

도움이 되었습니까?

해결책

예, "새로운"수정자를 사용하면 컴파일러 경고가 효과적으로 침묵하지만 명시 적으로 숨어 있습니다 정적 메소드가있는 인스턴스 메소드. (이것은 방법을 재정의하는 것과 다릅니다.) 일반적으로 매우 좋은 이유를 제외하고 인스턴스 방법을 숨기고 싶지 않으며 실제로 통화의 동작 의미를 변경하기 때문에 정적 메소드로 숨겨서는 안됩니다. .NET의 모든 객체에는 ToString ()이라는 인스턴스 방법이 있으며 개발자가 기대하는 특정 동작이 있습니다. 새로운 정적 방법으로 그 행동을 숨겨서 많은 혼란을 초래할 수있는 기대를 바꾸고 있습니다.

당신은 "스트링에"무엇입니까? 정적 클래스는 일반적으로 내부 상태를 유지하지 않으므로 ToString () 호출의 논리적 출력으로 제공 할 내부 데이터가 없어야합니다. 클래스 디자인을 다시 생각하거나 인스턴스를 숨기지 않고 메소드의 목적을 더 명확하게 나타내는 다른 메소드 이름을 제공 할 수 있습니다.

다른 팁

정적 클래스에서는 Tostring을 무시할 수 없습니다. .ToString은 인스턴스 방법이며 정의에 따라 정적 클래스에는 정적 멤버 만 가질 수 있습니다.

또한 왜 .toString ()을 무시하고 싶습니까? 클래스의 인스턴스를 얻을 방법이 없으므로 기능을 호출 할 수있는 방법이 없습니다.

참고 : 새 구문을 사용하면 .TOSTRING을 무시하지 않습니다. Object.ToString () 메소드와 완전히 관련이없는 새 멤버를 만듭니다.

좋아, 그래서 질문을 할 때 나는 답을 찾았다.

새로운 수정 자 :

http://msdn.microsoft.com/en-us/library/51y09td4(vs.71).aspx#vclrfnew_newmodifier

이제 방법은 다음과 같습니다.

공개 새로운 정적 문자열 tostring ()

감사합니다, 키이스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top