を使用し、コンストラクターにOn Error Resume Next
例外がある場合、または作成時に戻るプロキシを作成しない限り。MyClass
Nothing
プロキシのVB.NETバージョンが「機能する」ことを確認しているときに、作成直後(OPで要求したように)であることに気付きましたが、それ以外のことをしようとすると、確かmyObj Is Nothing
に. そして、値をテストするよりもはるかに多くのことをしようとすると、通常はそうなります。(この段階では、C# と同じです。そして、この時点で、私は本当に新しい質問を開始する必要があります...)False
Nothing
Nothing
Try Catch
しかし、VB.NET がNothing
!を結晶化するには、「空」の存在で十分であることがわかりました。(LinqPad の Roslyn C# 6 (ベータ) バージョンの時点で、C# は同じことを実行します。)
Sub Main()
Dim myObj = New MyFunnyType()
If myObj Is Nothing Then
Call "It IS Nothing".Dump
Else
' Comment out this Try and myObj will not be Nothing below.
Try
'Call myObj.ToString.Dump
Catch nr As NullReferenceException
Call "Maybe it was nothing?".Dump
Catch ex As Exception
Call ex.Message.Dump
End Try
Call myObj.Dump("Nil?")
If myObj Is Nothing Then
Call "Now it IS Nothing".Dump
Else
Call "It still is NOT Nothing!".Dump
End If
End If
End Sub
' Define other methods and classes here
Class MyFunnyProxyAttribute
Inherits ProxyAttribute
Public Overrides Function CreateInstance(ByVal ServerType As Type) As MarshalByRefObject
Return Nothing
End Function
End Class
<MyFunnyProxy> _
Class MyFunnyType
Inherits ContextBoundObject
Public Overrides Function ToString() As String
If Me IsNot Nothing Then
Return "Yes, I'm here!"
Else
Return "No, I'm really Nothing!"
End If
End Function
End Class
への呼び出しToString
はコメント アウトすることを意図していることに注意してくださいNothing
。
(Roslyn C# 6 ベースの LinqPad が登場するまで、C# で同様の効果は見られませんでした。つまり、ToString
内の呼び出しをコメント アウトするだけで、非 のままtry
で十分でした。C# 6 LinqPad (ベータ) は、VB.NET と同じように動作します。 、結晶化しないように除去する必要があります。)myObj
null
try
null