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知道什么值应该返回这些未使用的函数/程序。仅使用“return Nothing 或 return 0/”是个坏主意,可能有可能以某种方式引用 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

我的界面:

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

我无法理解如何将变量 strPooratavText 从 CTekstiPooraja 获取到 CAlgrotimilinePooraja。通常我创建的那个实例有效但现在不行。当相同的函数和过程在另一个类中有相同的函数和过程时,我无法理解如何处理 CAlgoritmilinePooraja 中已经存在的函数和过程。也许,有可能以某种方式将它们引用到 CTekstiPooraja 中的现有函数/程序?你能解释一下如何识别,已经厌倦了上网寻找解决方案,已经尝试了很多。

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 看起来只做一件事,实际的字符串反转。

我会将 strReverse 的实现移到 CtekstiPooraja 中,然后消除 CAlgrotimilinePooraja。

PS 我会尽量坚持使用英语的类名以及函数和变量。

于 2012-10-18T23:37:20.807 回答