I'm hoping that someone can take a few minutes and take a look at the
following code for me. It may look complex at first, but it actually is
very simple. What I have here is a VB.Net WinForm with no controls on the
form. When it executes, it runs through a sample app that I set up that
recreates the problem that I am having, but it's not the same application.
I wrote a sample that is based on a Y2K sample that I just made up because
what I am actually working on is a compiler and there's just too much in the
code to post the real thing. So this sample recreates the same problem, but
keep in mind that it's not the same code so my solutions may be limited.
If you create a WinForm and paste the code and close at the bottom of this
post, you will see the following in a Test() function at the bottom of the
code...
'Test1
Dim obj As New Object
obj = New DateFormatter.YearFormatter
'Test2
'Dim obj As New DateFormatter.YearFormatter
'Lets just pretend that there is logic that could cause either one
to be hit.
'For this sample, I'm forcing it to the first case.
Dim int As Integer = 0
Select Case int
Case 0
Dim str As String = obj.PreY2K.YY
Case 1
Dim str As String = obj.PostY2K.YYYY
End Select
To see what my problem is. Use the code below and execute with a breakpoint
on the line after the Test1 comment. You will get an error on the "dim str"
line. Then comment out the Test1 code and uncomment the Test2 code. Run it
again and note that you do not get the error. What's the difference?
Note that Test1 uses a generic object and then casts it as the YearFormatter
class. This causes an error when it hits the code that looks at the
PreY2K.YY property. However in Test2 if I just go ahead and create it obj
as that type, then I do not get an error. I do not see what the difference
between the two is, but apparently I am overlooking something significant.
The problem is that I have been using logic like Test2 and I need to change
it to Test1 using a generic object. I need to make it generic because I
have a number of different class that would be equivalent to YearFormatter.
Maybe it would be sort of like having YearFormmater, YearFormatterY2K, and
YearFormatterPreY2K classes, then needed the logic of the code to pick which
one to use. So I need to be able to control which class becomes the obj
object and set it accordingly.
In the end, I just need to figure out how to get Test1 to work like Test2.
Any ideas? Any suggestions or ideas would be very much appreciated. I
think I am over looking something simple here.
My sample code is below.
Best regards,
Greg Rothlander
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Name = "Form1"
Me.Text = "Form1"
End Sub
#End Region
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim obj As New SomeClass
obj.Test()
End Sub
End Class
Class DateFormatter
Class YearFormatter
Class PreY2K
' Definition for pre y2k file.
' YY
Private Shared _YY As String = ""
Public Shared Property YY() As String
Get
Return _YY
End Get
Set(ByVal Value As String)
_YY = Value
End Set
End Property
Public Shared Function ConvertToY2K() As String
If CInt(YY > 50) Then
Return "19" & YY
Else
Return "20" & YY
End If
End Function
End Class
Class PostY2K
' Definition for post y2k file.
' YYYY
Private Shared _YYYY As String = ""
Public Shared Property YYYY() As String
Get
Return _YYYY
End Get
Set(ByVal Value As String)
_YYYY = Value
End Set
End Property
Public Shared Function ConvertToPreY2K() As String
Return Mid(YYYY, 3, 2)
End Function
End Class
End Class
End Class
Class SomeClass
Public Function Test() As String
'Test1
Dim obj As New Object
obj = New DateFormatter.YearFormatter
'Test2
'Dim obj As New DateFormatter.YearFormatter
Dim int As Integer = 0
Select Case int
Case 0
Dim str As String = obj.PreY2K.YY
Case 1
Dim str As String = obj.PostY2K.YYYY
End Select
End Function
End Class
===================================
This list is hosted by DevelopMentorĀ® http://www.develop.com
View archives and manage your subscription(s) at http://discuss.develop.com