📄 latebindingtests2.vb
字号:
'' LateBindingTests2.vb'' Author:' Boris Kirzner (borisk@mainsoft.com)''' Copyright (C) 2002-2006 Mainsoft Corporation.' Copyright (C) 2004-2006 Novell, Inc (http://www.novell.com)'' Permission is hereby granted, free of charge, to any person obtaining' a copy of this software and associated documentation files (the' "Software"), to deal in the Software without restriction, including' without limitation the rights to use, copy, modify, merge, publish,' distribute, sublicense, and/or sell copies of the Software, and to' permit persons to whom the Software is furnished to do so, subject to' the following conditions:' ' The above copyright notice and this permission notice shall be' included in all copies or substantial portions of the Software.' ' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF' MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE' LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION' OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION' WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.Imports SystemImports System.ReflectionImports NUnit.Framework#If mono_not_yet Then 'No late binding for vbnc yet.<TestFixture()> _Public Class LateBindingTests2 Dim bo As Boolean = True Dim b As Byte = 1 Dim s As Short = 1 Dim i As Integer = 1 Dim l As Long = 1 Dim c As Char = "a"c Dim d As Double = 1.0 Dim si As Single = 1.0 Dim ss2 As String = "aa" Dim ccA As A = New A Dim ccB As BB = New BB Dim ccc As CC = New CC Dim iic As IConvertible = New IC#If NET_2_0 Then Dim sb As SByte = 1 Dim us As UShort = 1 Dim ui As UInteger = 1 Dim ul As ULong = 1#End If Private Class C1 Public Function F(ByVal o As Object) As String Return "Object" End Function End Class <Test()> _ Public Sub LateBind_Object() Dim o As Object = New C1 Assert.AreEqual("Object", o.F(bo)) Assert.AreEqual("Object", o.F(b)) Assert.AreEqual("Object", o.F(s)) Assert.AreEqual("Object", o.F(i)) Assert.AreEqual("Object", o.F(l)) Assert.AreEqual("Object", o.F(c)) Assert.AreEqual("Object", o.F(d)) Assert.AreEqual("Object", o.F(si)) Assert.AreEqual("Object", o.F(ccA)) Assert.AreEqual("Object", o.F(ss2)) Assert.AreEqual("Object", o.F(iic))#If NET_2_0 Then Assert.AreEqual("Object", o.F(sb)) Assert.AreEqual("Object", o.F(us)) Assert.AreEqual("Object", o.F(ui)) Assert.AreEqual("Object", o.F(ul))#End If End Sub Private Class C2 Public Function F(ByVal o As String) As String Return "String" End Function End Class <Test()> _ Public Sub LateBind_String() Dim o As Object = New C2 Assert.AreEqual("String", o.F(bo)) Assert.AreEqual("String", o.F(b)) Assert.AreEqual("String", o.F(s)) Assert.AreEqual("String", o.F(i)) Assert.AreEqual("String", o.F(l)) Assert.AreEqual("String", o.F(c)) Assert.AreEqual("String", o.F(d)) Assert.AreEqual("String", o.F(si)) 'Assert.AreEqual("String", o.F(ccA)) Assert.AreEqual("String", o.F(ss2)) 'Assert.AreEqual("Object", o.F(iic))#If NET_2_0 Then Assert.AreEqual("String", o.F(sb)) Assert.AreEqual("String", o.F(us)) Assert.AreEqual("String", o.F(ui)) Assert.AreEqual("String", o.F(ul))#End If End Sub <Test(), ExpectedException(GetType(InvalidCastException))> _ Public Sub LateBind_String2() Dim o As Object = New C2 o.F(ccA) End Sub <Test(), ExpectedException(GetType(InvalidCastException))> _ Public Sub LateBind_String3() Dim o As Object = New C2 o.F(iic) End Sub Private Class C100 Public Function F(ByVal o As Object) As String Return "Object" End Function Public Function F(ByVal o As String) As String Return "String" End Function End Class <Test()> _ Public Sub LateBind_StringObject() Dim o As Object = New C100 Dim ccA As A = New A Assert.AreEqual("Object", o.F(bo)) Assert.AreEqual("Object", o.F(b)) Assert.AreEqual("Object", o.F(s)) Assert.AreEqual("Object", o.F(i)) Assert.AreEqual("Object", o.F(l)) Assert.AreEqual("String", o.F(c)) Assert.AreEqual("Object", o.F(d)) Assert.AreEqual("Object", o.F(si)) Assert.AreEqual("Object", o.F(ccA)) Assert.AreEqual("String", o.F(ss2)) Assert.AreEqual("Object", o.F(iic))#If NET_2_0 Then Assert.AreEqual("Object", o.F(sb)) Assert.AreEqual("Object", o.F(us)) Assert.AreEqual("Object", o.F(ui)) Assert.AreEqual("Object", o.F(ul))#End If End Sub Private Class C4 Public Function F(ByVal ParamArray args() As A) As String Return "ParamArray A()" End Function Public Function F(ByVal a As A, ByVal ParamArray args() As A) As String Return "A,ParamArray A()" End Function End Class#If NET_2_0 Then 'TargetJvmNotWorking - Ambiguous matching in method resolution <Category("TargetJvmNotWorking")> _ <Test()> _ Public Sub LateBind_Complex_ParamArray1()#Else <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_Complex_ParamArray1()#End If Dim o As Object = New C4 o.F(ccA) End Sub#If NET_2_0 Then 'TargetJvmNotWorking - Ambiguous matching in method resolution <Category("TargetJvmNotWorking")> _ <Test()> _ Public Sub LateBind_Complex_ParamArray2()#Else <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_Complex_ParamArray2()#End If Dim o As Object = New C4 o.F(ccA, ccA) End Sub#If NET_2_0 Then 'TargetJvmNotWorking - Ambiguous matching in method resolution <Category("TargetJvmNotWorking")> _ <Test()> _ Public Sub LateBind_Complex_ParamArray6()#Else <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_Complex_ParamArray6()#End If Dim o As Object = New C4 o.F(ccA, ccA, ccA, ccA, ccA, ccA) End Sub Private Class C5 Public Function F(ByVal ParamArray args() As A) As String Return "ParamArray A()" End Function Public Function F(ByVal a As A) As String Return "A" End Function Public Function F(ByVal a1 As A, ByVal a2 As A) As String Return "A,A" End Function Public Function F(ByVal a1 As A, ByVal a2 As A, ByVal a3 As A, ByVal a4 As A) As String Return "A,A,A,A" End Function End Class <Test()> _ Public Sub LateBind_Complex_ParamArray10() Dim o As Object = New C5 Assert.AreEqual("A", o.F(ccA)) Assert.AreEqual("A,A", o.F(ccA, ccA)) Assert.AreEqual("ParamArray A()", o.F(ccA, ccA, ccA)) Assert.AreEqual("A,A,A,A", o.F(ccA, ccA, ccA, ccA)) Assert.AreEqual("ParamArray A()", o.F(ccA, ccA, ccA, ccA, ccA)) End Sub <Test()> _ Public Sub LateBind_Complex_ParamArray11() Dim o As Object = New C5 Assert.AreEqual("A", o.F(ccB)) Assert.AreEqual("A,A", o.F(ccB, ccB)) Assert.AreEqual("ParamArray A()", o.F(ccB, ccB, ccB)) Assert.AreEqual("A,A,A,A", o.F(ccB, ccB, ccB, ccB)) Assert.AreEqual("ParamArray A()", o.F(ccB, ccB, ccB, ccB, ccB)) End Sub Private Class C6 Public Function F(ByVal ParamArray args() As A) As String Return "ParamArray A()" End Function Public Function F(ByVal a1 As A, ByVal a2 As A, ByVal a As A) As String Return "A,A,A" End Function Public Function F(ByVal ParamArray args() As BB) As String Return "ParamArray BB()" End Function Public Function F(ByVal a1 As BB, ByVal a2 As BB, ByVal a As BB) As String Return "BB,BB,BB" End Function End Class <Test()> _ Public Sub LateBind_Complex_ParamArray12() Dim o As Object = New C6 Assert.AreEqual("ParamArray A()", o.F(ccA)) Assert.AreEqual("A,A,A", o.F(ccA, ccA, ccA)) Assert.AreEqual("ParamArray A()", o.F(ccA, ccA, ccA, ccA, ccA)) Assert.AreEqual("ParamArray BB()", o.F(ccB)) Assert.AreEqual("BB,BB,BB", o.F(ccB, ccB, ccB)) Assert.AreEqual("ParamArray BB()", o.F(ccB, ccB, ccB, ccB, ccB)) Assert.AreEqual("A,A,A", o.F(ccB, ccA, ccA)) Assert.AreEqual("ParamArray A()", o.F(ccB, ccA, ccB, ccA, ccB)) End Sub Private Class C7 Public Function F(ByVal b As Byte) As String Return "Byte" End Function Public Function F(ByVal b As String) As String Return "String" End Function Public Function F(ByVal o As Object) As String Return "Object" End Function End Class <Test()> _ Public Sub LateBind_Complex_IConvertible1() Dim o As Object = New C7 Assert.AreEqual("Object", o.F(iic)) End Sub Private Class C8 Public Function F(ByVal b As Byte) As String Return "Byte" End Function Public Function F(ByVal b As String) As String Return "String" End Function End Class <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_Complex_IConvertible2() Dim o As Object = New C8 o.F(iic) End Sub Private Class C9 Public Function F(ByVal b As Integer, ByVal s As String) As String Return "Integer,String" End Function Public Function F(ByVal b As Short, ByVal o As Object) As String Return "Short,Object" End Function End Class <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_Primitive_Object1() Dim o As Object = New C9 o.F(b, c) End Sub <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_IConvertible_Primitive1() Dim o As Object = New C9 o.F(iic, c) End Sub Private Class C10 Public Function F(ByVal o As Short, ByVal a1 As A) Return "Short,A" End Function Public Function F(ByVal o As Object, ByVal b1 As BB) Return "Object,BB" End Function End Class <Test()> _ Public Sub LateBind_Complex_Primitive1() Dim o As Object = New C10 Assert.AreEqual("Short,A", o.F(s, ccA)) End Sub <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_Complex_Primitive2() Dim o As Object = New C10 o.F(s, ccB) End Sub Private Class C11 Public Function F(ByVal o As Char, ByVal a1 As A) Return "Char,A" End Function Public Function F(ByVal o As String, ByVal b1 As BB) Return "Object,BB" End Function End Class <Test()> _ Public Sub LateBind_Complex_Char1() Dim o As Object = New C11 Assert.AreEqual("Char,A", o.F(c, ccA)) End Sub <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_Complex_Char2() Dim o As Object = New C11 o.F(c, ccB) End Sub Private Class C12 Public Function F(ByVal o As String, ByVal a1 As A) Return "String,A" End Function Public Function F(ByVal o As Object, ByVal b1 As BB) Return "Object,BB" End Function End Class <Test()> _ Public Sub LateBind_Complex_Char3() Dim o As Object = New C12 Assert.AreEqual("String,A", o.F(c, ccA)) End Sub <Test(), ExpectedException(GetType(AmbiguousMatchException))> _ Public Sub LateBind_Complex_Char4() Dim o As Object = New C12 o.F(c, ccB)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -