0

次のオブジェクトを作成する必要がありました。基本的には、整数または文字列を渡し、これらを整数またはゼロで埋められた文字列としてフェッチする方法です。

Public Class DOC_NUMBER
    Private m_DOC_NUMBER As Integer = 0

    Public Sub New(ByVal DOC_NUMBER As Integer)
        m_DOC_NUMBER = DOC_NUMBER
    End Sub

    Public Sub New(ByVal DEPOT_CODE As String)
        Dim ParseInput As Integer = 0
        If Integer.TryParse(DEPOT_CODE, ParseInput) = False Then
            m_DOC_NUMBER = 0
        Else
            m_DOC_NUMBER = ParseInput
        End If
    End Sub

    Public Overrides Function ToString() As String
        Return Right("0000000000" & m_DOC_NUMBER.ToString(), 10)
    End Function

    Public Function ToInteger() As Integer
        Return m_DOC_NUMBER
    End Function
End Class

このクラスのインスタンスは、次のように設定できます。

Dim DocumentID As New DOC_NUMBER("00123")
Dim DocumentID As New DOC_NUMBER(123)

これは、次のように他の変数に割り当てることができます。

Dim NewDocumentID as Integer = DocumentID.ToInteger()
Dim NewDocumentID as String = DocumentID.ToString()

.ToInteger()ただし、99% の確率で整数を扱うことになるため、次のようにオプションにしたいと考えています。

Dim NewDocumentID as Integer = DocumentID

明らかに、これは現在、「タイプ 'X.DOC_NUMBER' の値は '整数' に変換できません」というエラーを出します。

整数に割り当てられている整数を自動的に渡すようにクラスを変更するにはどうすればよいでしょうか?

任意の .net 言語の例で問題ありません。

4

1 に答える 1

4

暗黙的な変換を使用して、必要なことを行うことができます。C# では、次のようになります。

public static implicit operator string(DOC_NUMBER docNum)
{
    // implement
}
public static implicit operator int(DOC_NUMBER docNum)
{
    // implement
}

VB.NET に相当するものはWidening Operator.

ただし、ToInteger()and ToString()(またはプロパティ: AsIntegerand AsString、おそらく) は、暗黙的な変換よりもはるかに明確で単純であるため、より優れていることがわかります。

于 2013-08-01T15:08:16.633 に答える