2016-07-05 13 views
2

먼저이 항목을 검색했지만 비슷한 게시물이 있지만 답변을 찾을 수 없습니다. :(클래스의 속성의 .ToString을 재정의하는 방법

내가 클래스가 있다고 가정하자 :. 내가 속성 NumsDrawn의로 .toString를 오버라이드 (override) 할

Public Class ND 
    Private mNumsDrawn = New List(Of Integer) 

    Public Sub New(ByVal vNum As Integer) 
     For i = 1 To vNum 
      mNumsDrawn.Add(0) 
     Next 
    End Sub 

    Public Property NumsDrawn As List(Of Integer) 
     Get 
      Return mNumsDrawn 
     End Get 
     Set(ByVal value As List(Of Integer)) 
      mNumsDrawn = value 
     End Set 
    End Property 
End Class 

내가 그 클래스의로 .toString 재정을 넣어 그 단지 오버라이드 (override)하는 경우 물론 클래스 '로 .toString는. 나는 목록에 출력에 모든 숫자를이 사용할 수 있지만 나는 무승부로 하나 개의 번호의 출력을 변경하고 싶습니다.

Dim MyDraw = New ND(6) 

MsgBox(MyDraw.ToString) 

하지만 내가 원하는 것은 이 같은 ..

고마워!

+1

'MyDraw.NumsDrawn (1) .ToString()'의 문제점은 무엇입니까? –

+0

List (Of T)에서 고유 한 클래스를 파생시켜야합니다. 가능합니다. 그러나 NumsDrawn에 인수를 전달하려는 이유는 추측하기가 매우 어렵습니다. –

+0

나는 실제로 피난처를 사용했다. 전에리스트를 사용했는데 이것은 모두 배열로 설정되었다. Numsdrawn New에 인수를 전달할 예정입니다. 크기를 설정해야 할 때마다 사용되는 시간이 다를 수 있지만 변경되지 않기 때문입니다. 나는 아마 배열로 돌아갈 것이다. 왜냐하면 나는 그것들을 조금 더 잘 알고 있기 때문에 일단 설정을 바꾸지 않는다. 클래스 ND는 또한 더 큰 클래스의 하위 클래스이기 때문에 질문을 단순화하려고했습니다. 주요 질문은 심지어조차 아니다. 토스트 링, 클래스의 속성을위한 메소드를 만드는 방법. 나는 다른 수업 방식을 만드는 것에 대해 연구하고 그것이 어디로가는 지 볼 것입니다, 감사합니다! – Konrad

답변

1

난 당신이 정수 유형의 사용자 정의 .ToString() 재정의를 갖고 싶어 이유를 모르겠어요 ...하지만 ...

이 변화하는 것입니다 할 수있는 간단한 방법 당신의 NumsDrawnList(Of Integer)List(Of NumClass) A와 다음 클래스에 .ToString를 오버라이드 (override)에서 :

Public Class ND 
    Private mNumsDrawn As List(Of NumClass) = New List(Of NumClass) 

    Public Sub New(ByVal vNum As Integer) 
     For i = 1 To vNum 
      mNumsDrawn.Add(New NumClass(0)) 
     Next 
    End Sub 

    Public Property NumsDrawn As List(Of NumClass) 
     Get 
      Return mNumsDrawn 
     End Get 
     Set(ByVal value As List(Of NumClass)) 
      mNumsDrawn = value 
     End Set 
    End Property 
End Class 

Public Class NumClass 
    Public Property Value As Integer 
    Public Sub New(value As Integer) 
     Me.Value = value 
    End Sub 
    Public Overrides Function ToString() As String 
     Return "Here is my formatted value: " & Me.Value 
    End Function 
End Class 

사용법 :

Dim myND As New ND(99) 
    Debug.WriteLine(myND.NumsDrawn(6).ToString()) 'outputs:- Here is my formatted value: 0 
+0

어제 밤에 그걸 시도했지만 고생했다. 오늘 밤에 나중에 시험해 볼거야. 문자열에 0을 덧붙이고 싶습니다. 내가 가진 문제는 setNumsDrawn을 정수로 설정하려고 시도했을 때 NumClass에 정수를 설정할 수 없다는 불평을하는 것이 었습니다. (예를 들어 귀하의 예가 될 수 있습니다.)하지만 나는 아마도 somethign을 잘못하고있었습니다. – Konrad

+0

코드가 완벽하게 작동합니다. 나는 내가 잘못 가고있는 것 같아. ND를위한 New() mNumsDrawn을 0으로 설정했지만 New NumClass로 설정하면 ToString을 재정의합니다. 하나의 질문으로, myND.NumsDrawn (1) = 1과 같은 일을 할 때 1이 NumClass 유형이 아니기 때문에 예외가 발생합니다. myND.NumsDrawn (1) = (New NumClass (1))을 수행해야합니다. Integers를 사용하는 방법이 있습니까? – Konrad

+0

그리고 그 대답은 일반적으로 클래스의 "속성의 메서드"가있는 내 문제입니다. NumClass에 넣은 메서드는 myND.mNumsDrawn (1) .myMethod()를 사용하여 간단하게 호출 할 수 있습니다. 하지만 mNumsDrawn에 정수를 저장하는 방법이 정말로 필요합니다. – Konrad

2

ToString() 메서드를 ND으로 재정의하는 것이 좋습니다. 이것이 가능하지만 IMO는별로 도움이되지 않습니다.

ND에 확장 방법을 정의하는 것이 더 도움이 될 것입니다. 확장 메서드는 Public Module (사실상 정적 클래스 임)에 배치해야합니다.

여전히 재정 ToString 방법을 원하는 경우
<Extension> 
Public Function ToFormattedValue(instance As ND, index As Integer) As String 
    Return instance.NumsDrawn(index).ToString() 
End Function 

' Use as: 
MessageBox.Show(MyDraw.ToFormattedValue(1)) 

이 코드는 거의 동일합니다 다음과 같이

수행 할 수 있습니다. 오버로드를 추가하는 것보다는 실제로 오버라이드하는 것이 아닙니다. 이처럼 :

Public Class ND 
    ' Other code here 
    Public Function ToString(index as Integer) As String 
     Return Me.NumsDrawn(1).ToString 
    End Function 
End Class 
+0

고마워, 어제 밤 Extension을보고 있었지만 그걸로는 가지 않았다. 둘 다 문제는 문자열에 액세스하는 코드가 다시 클래스에 있다고 생각합니다. 작동하지만 아주 직관적이지는 않습니다. 가능한 경우 MyDraw.NumsDrawn (1) .ToString 속성에 tostring에 액세스하고 싶습니다. 저는 지난 밤에 Number에 대한 또 다른 클래스를 만들어서 일종의 처리를했지만, 두 가지 문제가 발생합니다. 정수를 NumsDrawn에 더 이상 사용할 수 없습니다. NumsDrawn을 초기화하는 새 루틴을 시도 할 때 매우 간단합니다. 이제 NumsDrawn은 폼에서 예외를 throw합니다. – Konrad

+0

확장 기능을 살펴 보겠다. 예제는 ND 클래스 용 메서드를 만드는 것과 같은 결과를 얻는다. – Konrad