0

別のクラスから変数を取得する際に問題が発生し、別のクラスにすでに存在するインターフェイスの関数をどうするかがわかりません。

私が持っているもの:

ボタンをクリックすると逆の文字列が表示されるフォーム:(下にあるpooraja.StringReverseを呼び出したい

 Private Sub btnPoora1_Click(sender As System.Object, e As System.EventArgs) _
        Handles btnPoora1.Click

        'Dim text As PrjTekstiPooraja.ITeisendused = New PrjTekstiPooraja.CtekstiPooraja
        Dim text As PrjTekstiPooraja.ITeisendused = New PrjTekstiPooraja.CtekstiPooraja
        Dim pooraja As PrjTekstiPooraja.ITeisendused = New PrjTekstiPooraja.CAlgrotimilinePooraja

        text.strText = txtSisendTekst.Text
        txtValjundTekst1.Text = pooraja.stringReverse

        text.intStart = 1
        text.intEnd = Len(txtSisendTekst.Text)

        ascFSymbol.Text = text.ascFirstSymbol
        ascLSymbol.Text = text.ascLastSymbol()
    End Sub

CtekstiPooraja :( このクラスはデータを格納するために使用されます。データの下ではstrPooratavTextを意味します。データはCAlgoritmilinePoorajaで使用されます)

    Public Class CtekstiPooraja
    Implements ITeisendused

    Public intStartSymbol As Integer
    Public intEndSymbol As Integer
    Public strPooratavText As String

    Private Property intEnd As Integer Implements ITeisendused.intEnd
        Get
            Return intEndSymbol
        End Get
        Set(ByVal value As Integer)
            intEndSymbol = value
        End Set
    End Property

    Private Property intStart As Integer Implements ITeisendused.intStart
        Get
            Return intStartSymbol
        End Get
        Set(ByVal value As Integer)
            intStartSymbol = value
        End Set
    End Property

    Public Function pooraText() As String Implements ITeisendused.pooraText
        Return StrReverse(strPooratavText)
    End Function

    Public Property strText As String Implements ITeisendused.strText
        Get

            Return strPooratavText
        End Get
        Set(ByVal value As String)
            strPooratavText = value
            MsgBox(strPooratavText)
        End Set
    End Property

    Public Sub teisendaText(ByRef strSisendText As String) Implements ITeisendused.teisendaText
        strPooratavText = StrReverse(strSisendText)
    End Sub

    Public Function ascFirstSymbol() As String Implements ITeisendused.ascFirstSymbol
        Return Asc(GetChar(strPooratavText, intStartSymbol))
    End Function

    Public Function ascLastSymbol() As String Implements ITeisendused.ascLastSymbol
        Return Asc(GetChar(strPooratavText, intEndSymbol))
    End Function

    Public Function stringReverse() As String Implements ITeisendused.stringReverse
        Return Nothing
    End Function



End Class

CAlgrotimilinePooraja :( このクラスはフォームボタンで呼び出されます。CtekstiPoorajaからのデータでstringReverse関数を使用する必要があります。問題は、どこでも同じインターフェイスが使用され、このインターフェイスからいくつかの関数とプロシージャがあり、t necessary. I donどの値がわからないかです。これらの未使用の関数/プロシージャを返す必要があります。「returnNothingまたはreturn0/」を使用することはお勧めできません。何らかの形で、CTekstiPooraja関数/プロシージャ変数への参照がある可能性があります」)

Public Class CAlgrotimilinePooraja
    Implements ITeisendused

    Private x As New PrjTekstiPooraja.CtekstiPooraja
    Public Function stringReverse() As String Implements ITeisendused.stringReverse
        MsgBox(x.strPooratavText)
        Dim i As Integer = 0
        Dim j As Integer
        Dim characters(j) As Char
        Dim newString(j) As Char
        characters = x.strPooratavText.ToCharArray()
        newString = x.strPooratavText.ToCharArray()

        Do While i <= j - 1
            newString(i) = characters(j - 1)
            newString(j - 1) = characters(i)
            i += 1
            j -= 1
        Loop
        Return newString
    End Function

    Public Function ascFirstSymbol() As String Implements ITeisendused.ascFirstSymbol
        Return x.ascFirstSymbol()
    End Function

    Public Function ascLastSymbol() As String Implements ITeisendused.ascLastSymbol
        Return Nothing
    End Function

    Public Property intEnd As Integer Implements ITeisendused.intEnd
        Get
            Return x.intEndSymbol
        End Get
        Set(ByVal value As Integer)

        End Set
    End Property

    Public Property intStart As Integer Implements ITeisendused.intStart
        Get
            Return x.intStartSymbol
        End Get
        Set(ByVal value As Integer)

        End Set
    End Property

    Public Function pooraText() As String Implements ITeisendused.pooraText
        Return x.pooraText()
    End Function

    Public Property strText As String Implements ITeisendused.strText
        Get
            Return x.strPooratavText
        End Get
        Set(ByVal value As String)

        End Set
    End Property

    Public Sub teisendaText(ByRef strSisendText As String) Implements ITeisendused.teisendaText
        x.strPooratavText = StrReverse(strSisendText)
    End Sub
End Class

MyInterface:

Public Interface ITeisendused

    Property intStart As Integer
    Property intEnd As Integer
    Property strText As String

    Function pooraText() As String
    Function ascFirstSymbol() As String
    Function ascLastSymbol() As String
    Function stringReverse() As String
    Sub teisendaText(ByRef strSisendText As String)

End Interface

CTekstiPoorajaからCAlgrotimilinePoorajaに変数strPooratavTextを取得する方法がわかりません。通常、私が作成したインスタンスは機能しましたが、現在は機能していません。また、同じ関数とプロシージャが別のクラスにある場合、CAlgoritmilinePoorajaにすでに存在する関数とプロシージャをどうするか理解できません。たぶん、CTekstiPoorajaに存在する関数/プロシージャを何らかの形で参照することは可能ですか?解決策を見つけるためにインターネットをサーフィンするのにすでに疲れている、idの方法を教えてください。すでに多くのことを試みています。

4

1 に答える 1

1

さて、あなたはインターフェースを理解する上で根本的な問題を抱えていると思います。それらはデータと動作を記述します。インターフェースの一部を実装することは非常にまれです。

とはいえ、偽のデータを返すのではなく、インターフェイスの一部を実装する場合は、実装しない動作の例外をスローします。

特定の問題は、CAlgoritmilinePoorajaがCtekstiPoorajaのインスタンスで機能するが、既存のインスタンスを使用する代わりに新しいインスタンスを作成することです。追加

Sub New(incomingX as CtekstiPooraja)
  x = incomingX
End Sub

CAlgoritmilinePoorajaに。そして、あなたのイベントでは、...を使用します。

Dim text As PrjTekstiPooraja.CtekstiPooraja = New PrjTekstiPooraja.CtekstiPooraja
text.strText = txtSisendTekst.Text
Dim pooraja As PrjTekstiPooraja.ITeisendused = New PrjTekstiPooraja.CAlgrotimilinePooraja(text)

それはあなたが起こりたいことを実現するためのあなたのデザインへの最小限の変更ですが、それはおそらくあなたがすべきことではありません。strReverseを実装する以外に、CtekstiPoorajaはあなたが望むもののようですが、CAlgrotimilinePoorajaは、実際の文字列の反転という1つのことだけを実行するように見えます。

strReverseの実装をCtekstiPoorajaに移動してから、CAlgrotimilinePoorajaを削除します。

PS私は、クラス名だけでなく、関数や変数についても英語に固執しようとします。

于 2012-10-18T23:37:20.807 に答える