/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Test/Semantic/Semantics/WithBlockErrorTests.vb
1 151 строка
31 KB
Tomáš Matoušek
Refactoring of extension methods in source packages (#78620) - take 2 (#78894)
26 июн 2025, 18:42
Не верифицирован
26 июн 2025, 18:42
05fc006
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Imports Roslyn.Test.Utilities Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests Public Class WithBlockErrorTests Inherits BasicTestBase <Fact()> Public Sub WithTestNotDeclared() CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Module WithTestNotDeclared Sub Main() With o1 End With With o2 End With Dim o2 As Object = Nothing End Sub End Module </file> </compilation>).VerifyDiagnostics( Diagnostic(ERRID.ERR_NameNotDeclared1, "o1").WithArguments("o1"), Diagnostic(ERRID.ERR_UseOfLocalBeforeDeclaration1, "o2").WithArguments("o2")) End Sub <Fact()> Public Sub WithTestScoping() CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Module WithTestScoping Sub Main() Dim o1 As New Object() With o1 Dim o1 = Nothing With o1 Dim o2 = Nothing End With With New Object() Dim o1 As New Object() Dim o2 = Nothing End With End With End Sub End Module </file> </compilation>).VerifyDiagnostics( Diagnostic(ERRID.ERR_BlockLocalShadowing1, "o1").WithArguments("o1"), Diagnostic(ERRID.ERR_BlockLocalShadowing1, "o1").WithArguments("o1")) End Sub <Fact()> Public Sub WithTestNotAMember() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Class Class2 Public Sub Method1() End Sub End Class Module WithTestNotAMember Sub Main() Dim c2 As New Class2() With c2 .Method1("a") .Property1 = "a" .Method2() .Method3 End With End Sub End Module </file> </compilation>).VerifyDiagnostics( Diagnostic(ERRID.ERR_TooManyArgs1, """a""").WithArguments("Public Sub Method1()"), Diagnostic(ERRID.ERR_NameNotMember2, ".Property1").WithArguments("Property1", "Class2"), Diagnostic(ERRID.ERR_NameNotMember2, ".Method2").WithArguments("Method2", "Class2"), Diagnostic(ERRID.ERR_NameNotMember2, ".Method3").WithArguments("Method3", "Class2")) End Sub <Fact()> Public Sub WithTestCannotLiftMeReference() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Structure C2 Public A As Integer Public B As Date Public C As String Public Sub New(i As Integer) With Me .A = 1 Dim a As Action = Sub() .B = #1/2/2003# .C = "!" End Sub a() End With End Sub End Structure </file> </compilation>) compilation.AssertTheseDiagnostics(<![CDATA[ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. .B = #1/2/2003# ~~ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. .C = "!" ~~ ]]>) End Sub <Fact()> Public Sub WithTestCannotLiftMeReference2() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Structure C2 Public S As SSS Structure SSS Public A As Integer Public B As Date End Structure Public Sub New(i As Integer) Dim b As Action = Sub() With Me.S .A = 1 Dim a As Action = Sub() .B = #1/2/2003# End Sub End With End Sub End Sub End Structure </file> </compilation>) compilation.AssertTheseDiagnostics(<![CDATA[ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. With Me.S ~~ ]]>) End Sub <Fact()> Public Sub WithTestCannotLiftMeReference3() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Structure C2 Public S As SSS Structure SSS Public A As Integer Public B As Date End Structure Public Sub New(i As Integer) With S Dim c As Action = Sub() .A = 1 Dim a As Action = Sub() .B = #1/2/2003# End Sub End Sub End With End Sub End Structure </file> </compilation>) compilation.AssertTheseDiagnostics(<![CDATA[ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. .A = 1 ~~ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. .B = #1/2/2003# ~~ ]]>) End Sub <Fact()> Public Sub WithTestCannotLiftMeReference4() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Structure C2 Public S As SSS Structure SSS Public A As Integer Public B As Date End Structure Public Sub New(i As Integer) Dim b As Action = Sub() With S .A = 1 Dim a As Action = Sub() .B = #1/2/2003# End Sub End With End Sub End Sub End Structure </file> </compilation>).VerifyDiagnostics( Diagnostic(ERRID.ERR_CannotLiftStructureMeLambda, "S")) End Sub <Fact()> Public Sub WithTestCannotLiftMeReference_NestedLambda() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Structure C2 Public A As Integer Public B As Date Public C As String Public Sub New(i As Integer) Dim b As Action = Sub() Me.A = 1 With Me .A = 1 Dim a As Action = Sub() .B = #1/2/2003# .C = "!" End Sub a() End With End Sub End Sub End Structure </file> </compilation>) compilation.AssertTheseDiagnostics(<![CDATA[ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. Me.A = 1 ~~ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. With Me ~~ ]]>) End Sub <Fact()> Public Sub WithTestCannotLiftMeReference_NestedWith() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Structure C2 Public A As Integer Public B As Date Public C As String Public Sub New(i As Integer) Dim b As Action = Sub() Me.A = 1 With Me .A = 1 Dim a As Action = Sub() .B = #1/2/2003# .C = "!" End Sub a() End With End Sub End Sub End Structure </file> </compilation>) compilation.AssertTheseDiagnostics(<![CDATA[ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. Me.A = 1 ~~ BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. With Me ~~ ]]>) End Sub <Fact()> Public Sub WithTest_ValueTypeLValueInParentheses() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Structure C2 Structure SSS Public A As Integer Public B As Date End Structure Public Sub New(i As Integer) Dim a As New SSS With (a) .A = 1 .B = #1/1/2001# End With Console.Write(a.ToString()) End Sub End Structure </file> </compilation>).VerifyDiagnostics( Diagnostic(ERRID.ERR_LValueRequired, ".A"), Diagnostic(ERRID.ERR_LValueRequired, ".B")) End Sub <Fact()> Public Sub WithTest_UnknownMember() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Option Strict On Class S Sub S() With New Object() Dim x = .Goo() End With End Sub End Class </file> </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_StrictDisallowsLateBinding, ".Goo")) End Sub <Fact()> Public Sub BC36549ERR_CannotLiftAnonymousType1_2() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences( <compilation name="BC36549ERR_CannotLiftAnonymousType1_2"> <file name="a.vb"> Class Outer Sub New(ByVal value As Integer) Dim a = New With {.a = 1, .b = Sub() With .a .ToString() End With End Sub} End Sub End Class </file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC36549: Anonymous type property 'a' cannot be used in the definition of a lambda expression within the same initialization list. With .a ~~ </expected>) End Sub <Fact()> Public Sub BC36549ERR_CannotLiftAnonymousType1_3() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences( <compilation name="BC36549ERR_CannotLiftAnonymousType1_3"> <file name="a.vb"> Structure Clazz Sub S() With New With {.a = 1} With .a Dim cnt = .ToString() End With End With End Sub Sub S2() Dim at = New With { .a = 1, .b = Sub() With .a Dim cnt = .ToString() End With End Sub } End Sub End Structure </file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC36549: Anonymous type property 'a' cannot be used in the definition of a lambda expression within the same initialization list. With .a ~~ </expected>) End Sub <Fact()> Public Sub BC30044ERR_UseOfKeywordFromStructure1_2() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="UseOfKeywordFromStructure1_2"> <file name="a.vb"> Structure Clazz Public F_I As Integer Public F_S As String Sub New(ByVal value As Integer) With Me .F_I = 1 .F_S = "" End With With MyClass.F_I End With With MyBase.F_I End With End Sub End Structure </file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC30044: 'MyBase' is not valid within a structure. With MyBase.F_I ~~~~~~ </expected>) End Sub <Fact()> Public Sub BC30068ERR_LValueRequired_3() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="LValueRequired_3"> <file name="a.vb"> Class C2 Structure S Public S() As Integer End Structure Public Shared Sub M() With New S .S = New Integer(2) {} End With End Sub End Class </file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC30068: Expression is a value and therefore cannot be the target of an assignment. .S = New Integer(2) {} ~~ </expected>) End Sub <Fact()> Public Sub BC30367ERR_NoDefaultNotExtend1_2() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Class S Sub S() With New Object() Dim a = New With {.a = 1, .b = !a} End With End Sub End Class </file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC30367: Class '<anonymous type>' cannot be indexed because it has no default property. Dim a = New With {.a = 1, .b = !a} ~~ </expected>) End Sub <Fact()> Public Sub BC30491ERR_VoidValue_InWithStatement() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="BC30491ERR_VoidValue_InWithStatement"> <file name="a.vb"> Imports System Module Program Sub Main(args As String()) With AddressOf Main End With End Sub End Module </file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC30491: Expression does not produce a value. With AddressOf Main ~~~~~~~~~~~~~~ </expected>) End Sub <Fact()> Public Sub BC30491ERR_VoidValue_InWithStatement2() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="BC30491ERR_VoidValue_InWithStatement2"> <file name="a.vb"> Imports System Module Program Sub Main(args As String()) With Main(args) End With End Sub End Module </file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC30491: Expression does not produce a value. With Main(args) ~~~~~~~~~~ </expected>) End Sub <Fact()> Public Sub BC30524ERR_NoGetProperty1_4() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Module Program222 Sub Main2(args As String()) With IntProp Dim a = .GetType() Console.WriteLine(a.ToString()) End With End Sub Public WriteOnly Property IntProp As Integer Set(value As Integer) End Set End Property End Module </file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC30524: Property 'IntProp' is 'WriteOnly'. With IntProp ~~~~~~~ </expected>) End Sub <Fact()> Public Sub BC36535ERR_CannotLiftStructureMeQuery() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences( <compilation name="CannotLiftStructureMeQuery"> <file name="a.vb"> Option Infer On Imports System.Linq Structure Clazz Structure SS Public FLD As String End Structure Public FLD As SS Sub TEST() With MyClass.FLD Dim q = From x In "" Select .FLD End With End Sub End Structure </file> </compilation>, {SystemCoreRef}) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC36535: Instance members and 'Me' cannot be used within query expressions in structures. Dim q = From x In "" Select .FLD ~~~~ </expected>) End Sub <Fact()> Public Sub MultipleNestedWithWithNestedStructMe() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences( <compilation name="MultipleNestedWithWithNestedStructMe"> <file name="a.vb"> Imports System Structure Base Public Structure S Public F As SS End Structure Public Structure SS Public F As SSS End Structure Public Structure SSS Public F As SSSS End Structure Public Structure SSSS Public F As String End Structure Public FLD As S Sub TEST() With Me.FLD With .F With .F With .F Dim _sub As Action = Sub() .F = "" End Sub End With End With End With End With End Sub End Structure </file> </compilation>, {}) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. .F = "" ~~ </expected>) End Sub <Fact()> Public Sub MultipleNestedWithWithNestedStructMe2() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences( <compilation name="MultipleNestedWithWithNestedStructMe2"> <file name="a.vb"> Imports System Structure Base Public Structure S Public F As SS End Structure Public Structure SS Public F As SSS End Structure Public Structure SSS Public F As SSSS End Structure Public Structure SSSS Public F As String End Structure Public FLD As S Sub TEST() With Me.FLD With .F With .F Dim _sub As Action = Sub() With .F .F = "" End With End Sub End With End With End With End Sub End Structure </file> </compilation>, {}) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures. With .F ~~ </expected>) End Sub <Fact()> Public Sub MultipleNestedWithRValueStruct() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences( <compilation name="MultipleNestedWithRValueStruct"> <file name="a.vb"> Imports System Structure Base Public Structure S Public F As SS End Structure Public Structure SS Public F As SSS End Structure Public Structure SSS Public F As SSSS End Structure Public Structure SSSS Public F As String End Structure Public FLD As S Sub TEST() Dim x As New S With (x) With .F With .F With .F .F = "" End With End With End With End With With x With .F With .F With .F .F = "" End With End With End With End With With (x).F With .F With .F .F = "" End With End With End With With x.F With .F With .F .F = "" End With End With End With With (x).F.F.F .F = "" End With With x.F.F.F .F = "" End With End Sub End Structure </file> </compilation>, {}) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC30068: Expression is a value and therefore cannot be the target of an assignment. .F = "" ~~ BC30068: Expression is a value and therefore cannot be the target of an assignment. .F = "" ~~ BC30068: Expression is a value and therefore cannot be the target of an assignment. .F = "" ~~ </expected>) End Sub <Fact()> Public Sub TestSimpleWith_ValueTypeLValue_1() CompileAndVerify( <compilation name="TestSimpleWith_ValueTypeLValue_1"> <file name="a.vb"> Structure Struct Public A As String Public B As String End Structure Class Clazz Structure SS Public FLD As Struct End Structure Public FLD As SS Sub TEST_OK() Dim a As Struct With a .A = "" .B = "" End With a.ToString() End Sub Sub TEST_WARNING() Dim b As Struct With b .A = "" End With b.ToString() End Sub End Class </file> </compilation>). VerifyDiagnostics( Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "b").WithArguments("b")) End Sub <Fact()> Public Sub TestSimpleWith_ValueTypeLValue_2() CompileAndVerify( <compilation name="TestSimpleWith_ValueTypeLValue_2"> <file name="a.vb"> Structure Struct Public A As String Public B As String End Structure Class Clazz Structure SS Public FLD As Struct End Structure Public FLD As SS Sub TEST_OK() Dim a As Struct With a .A = "" .B = "" Dim x = .B End With End Sub Sub TEST_WARNING() Dim b As Struct With b .A = "" Dim x = .B End With End Sub End Class </file> </compilation>). VerifyDiagnostics( Diagnostic(ERRID.WRN_DefAsgUseNullRef, ".B").WithArguments("B")) End Sub <Fact()> Public Sub TestSimpleWith_ValueTypeLValue_3() CompileAndVerify( <compilation name="TestSimpleWith_ValueTypeLValue_3"> <file name="a.vb"> Structure Struct Public A As String Public B As String End Structure Class Clazz Structure SS Public FLD As Struct End Structure Public FLD As SS Sub TEST_OK() Dim a As Struct With a .A = "" .B = "" S_ByRef(.B) End With End Sub Sub TEST_WARNING() Dim b As Struct With b .A = "" S_ByRef(.B) End With End Sub Sub S_ByRef(ByRef s As String) End Sub End Class </file> </compilation>). VerifyDiagnostics( Diagnostic(ERRID.WRN_DefAsgUseNullRefByRef, ".B").WithArguments("B")) End Sub <Fact()> Public Sub TestSimpleWith_NotInitializedVariable() CompileAndVerify( <compilation name="TestSimpleWith_NotInitializedVariable"> <file name="a.vb"> Structure SS Public A As Integer Public B As String End Structure Class CC Public A As Integer Public B As String End Class Structure Clazz Sub Main(args As String()) Dim s As SS With s Dim x = .A End With Dim c As CC With c Dim x = .A End With End Sub End Structure </file> </compilation>). VerifyDiagnostics( Diagnostic(ERRID.WRN_DefAsgUseNullRef, "c").WithArguments("c")) End Sub <Fact()> Public Sub TestWithInsideUsing() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences( <compilation name="TestWithInsideUsing"> <file name="a.vb"> Imports System Structure STRUCT Implements IDisposable Public C As String Public D As Integer Public Sub Dispose() Implements IDisposable.Dispose End Sub End Structure Class Clazz Public Shared Sub Main(args() As String) Using s = New STRUCT() With s .C = "Success" End With End Using End Sub End Class </file> </compilation>, {}) CompilationUtils.AssertTheseDiagnostics(compilation, <errors> BC42351: Local variable 's' is read-only and its type is a structure. Invoking its members or passing it ByRef does not change its content and might lead to unexpected results. Consider declaring this variable outside of the 'Using' block. Using s = New STRUCT() ~~~~~~~~~~~~~~~~ BC30068: Expression is a value and therefore cannot be the target of an assignment. .C = "Success" ~~ </errors>) End Sub <Fact()> Public Sub TestWithAndQueryVariable() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences( <compilation name="TestWithAndQueryVariable"> <file name="a.vb"> Imports System Imports System.Linq Structure STRUCT Public C As String Public D As Integer End Structure Class Clazz Public Shared Sub Main(args() As String) Dim source(10) As STRUCT Dim result = From x In source Select DirectCast(Function() With x .D = 123 End With Return x End Function, Func(Of STRUCT))() End Sub End Class </file> </compilation>, {SystemCoreRef}) CompilationUtils.AssertTheseDiagnostics(compilation, <errors> BC30068: Expression is a value and therefore cannot be the target of an assignment. .D = 123 ~~ </errors>) End Sub <WorkItem(543921, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543921")> <Fact()> Public Sub WithNewT() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="c.vb"> Interface I Property P As Object End Interface Module M Sub M(Of T As {I, New})() With New T() .P = Nothing End With End Sub End Module </file> </compilation>) compilation.AssertNoErrors() End Sub <Fact(), WorkItem(544195, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544195")> Public Sub WithMeMyClassMyBase() CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Class Class1 Overridable Sub Method1() With Me .Method1() End With With MyClass .Method1() End With With MyBase .New() End With End Sub End Class </file> </compilation>).VerifyDiagnostics( Diagnostic(ERRID.ERR_ExpectedDotAfterMyClass, "MyClass"), Diagnostic(ERRID.ERR_ExpectedDotAfterMyBase, "MyBase"), Diagnostic(ERRID.ERR_InvalidConstructorCall, ".New")) End Sub <Fact()> <WorkItem(49904, "https://github.com/dotnet/roslyn/issues/49904")> Public Sub ArrayAccessWithOmittedIndexAsWithTarget_01() Dim compilation = CreateCompilation( <compilation> <file name="c.vb"> Class Test Private MyArr(9, 3, 11) As MyStruct Sub Main() Dim n, p, r As Integer For n = 0 To 9 For p = 0 To 3 For r = 0 To 11 With MyArr(n, ) .A = n .B = p .C = r End With Next Next Next End Sub End Class Structure MyStruct Dim A As Integer Dim B As Integer Dim C As Integer End Structure </file> </compilation>) Dim tree = compilation.SyntaxTrees.Single() For Each node In tree.GetRoot().DescendantNodes() Dim model = compilation.GetSemanticModel(tree) model.GetMemberGroup(node) model = compilation.GetSemanticModel(tree) model.GetSymbolInfo(node) model = compilation.GetSemanticModel(tree) model.GetTypeInfo(node) Next compilation.AssertTheseEmitDiagnostics( <expected> BC30105: Number of indices is less than the number of dimensions of the indexed array. With MyArr(n, ) ~~~~~ BC30491: Expression does not produce a value. With MyArr(n, ) ~ </expected>) End Sub <Fact()> <WorkItem(49904, "https://github.com/dotnet/roslyn/issues/49904")> Public Sub ArrayAccessWithOmittedIndexAsWithTarget_02() Dim compilation = CreateCompilation( <compilation> <file name="c.vb"> Class Test Private MyArr(9, 3, 11) As MyStruct Sub Main() Dim n, p, r As Integer For n = 0 To 9 For p = 0 To 3 For r = 0 To 11 With MyArr(n, , ) .A = n .B = p .C = r End With Next Next Next End Sub End Class Structure MyStruct Dim A As Integer Dim B As Integer Dim C As Integer End Structure </file> </compilation>) Dim tree = compilation.SyntaxTrees.Single() For Each node In tree.GetRoot().DescendantNodes() Dim model = compilation.GetSemanticModel(tree) model.GetMemberGroup(node) model = compilation.GetSemanticModel(tree) model.GetSymbolInfo(node) model = compilation.GetSemanticModel(tree) model.GetTypeInfo(node) Next compilation.AssertTheseEmitDiagnostics( <expected> BC30491: Expression does not produce a value. With MyArr(n, , ) ~ BC30491: Expression does not produce a value. With MyArr(n, , ) ~ </expected>) End Sub End Class End Namespace