none
VB.net 繼承問題 RRS feed

  • 問題

  • 親愛的各位大大:

         我在網路上瀏灠有關vb.net繼承的資訊但測試時發生錯誤請問為何會錯?程式碼如下

     Public Class TestA
       Public i As Int32 = 100 '訪問無限制
       Private s As String = "Hello" '只有TestA可以訪問
       Protected b As Boolean = True '只有TestA和它的派生類可以訪問
       friend d As Double = 3.1415926 '只有同項目類可以訪問
       Protected Friend l As Long = 100000 ' 
       Public UName As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name.Split("\")(0)
     End Class
     Public Class TestB
            Inherits TestA
            Public Sub New()
                MyBase.UName = "jack"
                MyBase.b = False
                MyBase.d = 3.14
                MyBase.i = 10
                MyBase.l = 100
            End Sub
        End Class

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim sum As Integer
            For l = 1 To (100)
                sum += l
            Next
            Label1.Text = sum

            TextBox1.text=UName  '出現UName沒有宣告 為何錯呢?不是已經繼承TestA ,上面的l也繼承TestA 也可運算 為何 UName就不可以?

        End Sub

    End Class

    感謝各位大大

       

    2013年7月29日 上午 09:20

解答

所有回覆

  • 你的 Form1 繼承 TestA ? 我是不是誤會了什麼 ? 不然你怎會試圖在 Form1 類別中試圖直接用 UName 欄位 ?

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年7月29日 上午 09:44
    版主
  • 你必須在 Form 裡 new 一個 TestB 吧。

    Visual Basic OOP


    理直氣和,切記。

    Blog: http://blog.kkbruce.net

    Book:《ASP.NET MVC 4 網站開發美學

    2013年7月29日 下午 02:18
  • 親愛的各位大大您好:

    整個程式碼應該是這樣:

    Public Class Form1
        Public Class TestA
            Public i As Int32 = 100 '訪問無限制
            Private s As String = "Hello" '只有TestA可以訪問
            Protected b As Boolean = True '只有TestA和它的派生類可以訪問
            Friend d As Double = 3.1415926 '只有同項目類可以訪問
            Protected Friend l As Long = 100000 '
            Public UName As String =  System.Security.Principal.WindowsIdentity.GetCurrent.Name.Split("\")(0)
        End Class
        Public Class TestB
            Inherits TestA
            Public Sub New()
                MyBase.UName = "jack"
                MyBase.b = False
                MyBase.d = 3.14
                MyBase.i = 10
                MyBase.l = 100
            End Sub
        End Class

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim sum As Integer
            For i= 1 To (100)
                 sum += i        Next

            Label1.Text = sum
            TextBox1.Text = ? '如果我要把UName 的值輸出到TextBox1.text 該如何寫?
        End Sub
    End Class

    問題2:如何在將TestA、TestB 上定義與重新定義過的,在Private Sub Form1_Load上可以直接輸出?如果i、UName、MyBase.UName要輸出該怎麼寫呢?

    請各位大大解惑

    祝各位有愉快的一天


    • 已編輯 MichaelTsai10 2013年7月30日 上午 01:25 修正問題
    2013年7月30日 上午 12:57
  • Visual Basic 中的物件導向程式設計

    不是說了嗎,你要"New"一個物件。

    如果你怎麼New一個物件都不會,或者不瞭解New是什麼東西,那你應該把基礎知識學好,而不是急著寫程式。


    理直氣和,切記。

    Blog: http://blog.kkbruce.net

    Book:《ASP.NET MVC 4 網站開發美學

    2013年7月30日 上午 01:43
  • 1. For迴圈的l並非繼承而來,是你自己宣告的。

    2. Dim testA As New TestA()
        TextBox1.Text = testA.UName

    先去了解KKBruce提供的連結教學,會更容易懂。

    2013年7月30日 上午 02:18
  • 樓主又外出取材了嗎 ?

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年8月2日 下午 02:27
    版主