vb.net中嵌套类访问外部类变量时的有关问题

vb.net中嵌套类访问外部类变量时的问题

Public Class Class2

    Public str1 As String
    Overloads Sub MySub()
        str1 = "欢迎光临"
        MsgBox(str1)
    End Sub

    Friend Class MyClass1 : Inherits Class2
        Overloads Sub MySub()
            MsgBox(str1)
        End Sub

    End Class


End Class

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim cla1 As New Class2
        cla1.MySub()
        Dim cla2 As New Class2.MyClass1
        cla2.MySub()
    End Sub
End Class



外部类向str1赋值,然后
嵌套类访问外部类变量str1时这个str1值是怎么已经被空的?

这可能是因为被初始化的。

请问程序员如何解决这个问题。。。

我能做到的是把str1设置成共享shared。我觉得这样暴露很不理想。

如何防止外部类变量str1值不被初始化的情况下嵌套类仍然访问已存在的变量str1值呢



------解决方案--------------------
既然你知道加上shared就能实现,那么应该明白你的代码里cla1和cla2引用不同的对象实例,修改cla1不会影响cla2,反之亦然。
你可以把代码改成这样:
        Dim cla2 As New Class2.MyClass1
        Dim cla1 As Class2 = cla2
        cla1.MySub()
        cla2.MySub()

让cla1和cla2引用相同实例,这样MySub对str1的修改才能互相影响
------解决方案--------------------
引用:

Public Class Class2
    Public str1 As String
    Overloads Sub MySub()
        str1 = "欢迎光临"
        MsgBox(str1)
    End Sub
    Friend Class MyClass1 : Inherits Class2
        Overloads Sub MySub()
            MsgBox(str1)
        End Sub
    End Class
End Class

Public str1 As String 这个变量声明位置在于外部类Class2之中,内部类根本没有变量str1的声明。
内部类只是通过继承Inherits访问Class2的Str1变量而己。

但是,Class2中的Mysub过程已经赋值给了"欢迎光临"字符串。

然后,内部类通过继承访问读取那个Class2中的Str1字符串变量。

我的问题是内部类访问外部类的Str1字符串变量时,外部类的Str1值却被空了内容。


你对类和继承的理解有问题
比如有两类计算器,一类是普通的只能算加减乘除的计算器,一类是继承了这类计算器特性的但是有更多功能比如幂 自然对数的计算器,这个叫继承。类必须实例化才能用,你实例化一个外面的普通计算器,里面的高级计算器类是没有实例化的。继承是继承类,不是继承实例,你新建了class2的实例,但是对于myclass1来说它的str是class2类里的str,这个是空的,你对str1的赋值是在class2的一个实例里赋值的,而且被赋值的这个str1是在实例里的,不是在类里的公共成员。你如果把str1设为shared就不一样了,这个时候是类的公共成员,所有实例共享一个