.Net Code Monkey RSS 2.0
 Thursday, January 05, 2012
Constructors Continued from Part 1...

We will need a series of constructors which will be used when we create Widening Operators, later. The first we aill use will accept a parameter value for ticks as an Int64. We will set the date using our InternalDate property as this will handle setting the inherited _isNull field for us.
    ''' <summary>
    ''' Initializes a new instance of the <see cref="DateTimeNull" /> class to a specified number of ticks.
    ''' </summary>
    ''' <param name="ticks">The ticks.</param>
    Public Sub New(ByVal ticks As Long)
        MyBase.New()
        Me.InternalDate = New System.DateTime(ticks)
    End Sub
The next constructor will take a System.DateTime parameter to construct our object.
    ''' <summary>
    ''' Initializes a new instance of the <see cref="DateTimeNull" /> class using the specified System.DateTime value.
    ''' </summary>
    ''' <param name="value">The value.</param>
    Public Sub New(ByVal value As System.DateTime)
        Me.New(value.Ticks)
    End Sub
The following constructor will take a System.Data.SqlTypes.SqlDateTime parameter to construct our object.
    ''' <summary>
    ''' Initializes a new instance of the <see cref="DateTimeNull" /> class using the specified System.Data.SqlTypes.SqlDateTime value.
    ''' </summary>
    ''' <param name="value">The value.</param>
    Public Sub New(ByVal value As System.Data.SqlTypes.SqlDateTime)
        MyBase.New()
        Dim dt As System.DateTime
        dt = Convert.ToDateTime(value)
        Me.InternalDate = dt
    End Sub
The last constructor will take a System.DBNull to construct or object.

    ''' <summary>
    ''' Initializes a new instance of the <see cref="DateTimeNull" /> class using a system.DBNull object.
    ''' </summary>
    ''' <param name="value">The value.</param>
    Public Sub New(ByVal value As System.DBNull)
        Me.New(System.DateTime.MinValue)
        If Not Me.IsNull Then
            Me.SetIsNull(True)
        End If
    End Sub
With our constructors done we will take a quick look at some of the properties which may be useful. Each property will reflect one of the properties that the .Net System.Datetime object has. Reflector is a useful tool for investigating these. Each property will expose the underlying InternalDate's properties, but first it must check if our object is in the NULL state. I have included just a few properties so you can see the pattern used.
    ''' <summary>
    ''' Gets the date component of this instance.
    ''' </summary>
    ''' <value>A new DateTime with the same date as this instance, and the time value set to 12:00:00 midnight (00:00:00).</value>
    ''' <exception cref="ArgumentNullException">Thrown</exception>
    Public ReadOnly Property [Date]() As DateTimeNull
        Get
            If Me.HasValue Then
                Return New DateTimeNull(Me.InternalDate.Date)
            Else
                Throw New ArgumentNullException("Date cannot be returned for a null DateTimeNull")
            End If
        End Get
    End Property

    ''' <summary>
    ''' Gets the day of the month represented by this instance.
    ''' </summary>
    ''' <remarks>The day component, expressed as a value between 1 and 31.</remarks>
    Public ReadOnly Property Day() As System.Int32
        Get
            If Me.HasValue Then
                Return Me.InternalDate.Day
            Else
                Throw New NullReferenceException("Day cannot be expressed for a null DateTimeNull object. ")
            End If
        End Get
    End Property

    ''' <summary>
    ''' Gets the hour component of the date represented by this instance.
    ''' </summary>
    ''' <returns>The hour component, expressed as a value between 0 and 23, inclusive.</returns>
    Public ReadOnly Property Hour() As System.Int32
        Get
            If Me.HasValue Then
                Return Me.InternalDate.Hour
            Else
                Throw New NullReferenceException("Hour cannot be expressed for a null DateTimeNull object. ")
            End If
        End Get
    End Property

    ''' <summary>
    ''' Gets a System.DateTime object that is set to the current date and time on this computer, expressed as the local time.
    ''' </summary>
    ''' <returns>A DateTime whose value is the current local date and time.</returns>
    Public Shared ReadOnly Property Now() As DateTime
        Get
            Return DateTime.UtcNow.ToLocalTime
        End Get
    End Property

    ''' <summary>
    ''' Gets the current date.
    ''' </summary>
    '''<returns>A DateTime set to today's date, with the time component set to 00:00:00.</returns>
    Public Shared ReadOnly Property Today() As DateTime
        Get
            Return DateTime.Now.Date
        End Get
    End Property

Over time I will add more properties to my DateTimeNull object, as they are required. Next however, it is time to look at Operators. This will be in Part 3.

Thursday, January 05, 2012 1:21:05 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -
.Net | Asp.Net | VB.Net | Widening Operators
All comments require the approval of the site owner before being displayed.
Name
E-mail
(will show your gravatar icon)
Home page

Comment (Some html is allowed: a@href@title, b, blockquote@cite, em, i, strike, strong, sub, sup, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
Archive
<January 2012>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234
Blogroll
 Clemens Vasters
 Harry Pierson
Passion * Technology * Ruthless Competence
 Joshua Flanagan
A .NET Software Developer
 Michael Schwarz's Blog
Developing applications on the Microsoft platform since Windows 3.1!
 Omar Shahine
Yet another Microsoft blogger
 Scot GU
Scott Guthrie lives in Seattle and builds a few products for Microsoft
 Scott Hanselman
Programming Life and the Zen of Computers
 Tom Mertens
Tom's corner
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2012
Duane Wingett
Sign In
Statistics
Total Posts: 40
This Year: 5
This Month: 1
This Week: 0
Comments: 39
Themes
Pick a theme:
All Content © 2012, Duane Wingett
DasBlog theme 'Business' created by Christoph De Baene (delarou)