You want to create a Clone method that returns an object of the correct type. However, the ICloneable.Clone method always returns a generic object.
Make the method that implements ICloneable.Clone private, and add another, strongly typed Clone method.
The ICloneable interface always returns a generic System.Object reference, which means that the client must use casting code to convert the object to the appropriate type. However, you can remove this extra step by adding a strongly typed Clone method, as shown here.
Public Class Person Implements ICloneable Private _FirstName As String Private _LastName As String ' (Property procedure and constructor code omitted.) Private Function CloneMe() ...