In this post we will be adding properties and get/let methods to the class module.
The Code
Please create a class called clsFilms and add in this code:
Private m_ID As Long Private m_FilmName As String Private m_YearOfRelease As String Private m_RottenTomato As String Private m_Director As Long '''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''Properties'''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''ID'''''''''''''''''''''''''' Public Property Get ID() As Long ID = m_ID End Property ''''''''''''''''FilmName'''''''''''''''''''' Public Property Get FilmName() As String FilmName = m_FilmName End Property Public Property Let FilmName(value As String) If Not IsNull(value) Then m_FilmName = value End If End Property ''''''''''''''''YearOfRelease''''''''''''''' Public Property Get YearOfRelease() As String YearOfRelease = m_YearOfRelease End Property Public Property Let YearOfRelease(value As String) If Not IsNull(value) Then m_YearOfRelease = value End If End Property ''''''''''''''''RottenTomatoRating'''''''''' Public Property Get RottenTomato() As String RottenTomato = m_RottenTomato End Property Public Property Let RottenTomato(value As String) If Not IsNull(value) Then m_RottenTomato = value End If End Property ''''''''''''''''Director'''''''''''''''''''' Public Property Get Director() As Long Director = m_Director End Property Public Property Let Director(value As Long) If Not IsNull(value) Then m_Director = value End If End Property
The Explanation
Please remember that class modules don’t work in quite the same way as standard modules. They require declaration and instantiation and then provide access to properties and methods.
The Properties
Private m_ID As Long Private m_FilmName As String Private m_YearOfRelease As String Private m_RottenTomato As String Private m_Director As Long
The properties above are very similar in declaration to variables in standard modules. Well, exactly the same, in fact. The only difference is that in class modules we refer to them as properties and they should always be prefixed with m_ as a coding standard.
These properties are private which means that they can only be seen from within the class module. This is the correct way to create properties in a class module as you should not allow direct access to your properties or all hell can break loose.
Access To Properties
''''''''''''''''ID'''''''''''''''''''''''''' Public Property Get ID() As Long ID = m_ID End Property ''''''''''''''''FilmName'''''''''''''''''''' Public Property Get FilmName() As String FilmName = m_FilmName End Property Public Property Let FilmName(value As String) If Not IsNull(value) Then m_FilmName = value End If End Property ''''''''''''''''YearOfRelease''''''''''''''' Public Property Get YearOfRelease() As String YearOfRelease = m_YearOfRelease End Property Public Property Let YearOfRelease(value As String) If Not IsNull(value) Then m_YearOfRelease = value End If End Property ''''''''''''''''RottenTomatoRating'''''''''' Public Property Get RottenTomato() As String RottenTomato = m_RottenTomato End Property Public Property Let RottenTomato(value As String) If Not IsNull(value) Then m_RottenTomato = value End If End Property ''''''''''''''''Director'''''''''''''''''''' Public Property Get Director() As Long Director = m_Director End Property Public Property Let Director(value As Long) If Not IsNull(value) Then m_Director = value End If End Property
As we can’t directly access out properties we have to provide a method to read and sometimes write them.
Reading A Property
Public Property Get FilmName() As String FilmName = m_FilmName End Property
In order to read a property, we need a property get method.
Public Property Get FilmName() As String
The name of the get property is FilmName and it will return a value of data type String. Think of these as functions that return a value.
FilmName = m_FilmName
We set the return value to be equal to the value of m_FilmName.
Writing A Property
Public Property Let FilmName(value As String) If Not IsNull(value) Then m_FilmName = value End If End Property
In order to write a property we need a property let method.
Public Property Let FilmName(value As String)
In our case the name of the method is FilmName and it accepts one argument value As String. This method is very similar to a sub-procedure in that it performs an action but doesn’t return a value.
If Not IsNull(value) Then m_FilmName = value End If
Here we are seeing the real power of having private variables. We are using this code to update the value of m_FilmName ONLY IF the passed in argument value As String is not null. In this way we can protect our variables from bad input.
Making A Property Read-Only
In order to make a property read-only, we simply provide a Get property but not a Let property. In our code example above, the m_ID Property is read-only.
Here is the database with the added code: