Crear la clase Conjunto de enteros, que será parecido a una lista sólo que no pueden existir elementos repetidos y da igual el orden en el que estén colocados los elementos. Tendrá las siguientes características:

- Atributos: una lista que contendrá los elementos que existen en el conjunto.
- Propiedades: el número de elementos que hay en el conjunto y una variable booleana que nos diga si está vacío o no.
- Métodos:
o Definir el operador + que será la unión de dos conjuntos.
o Definir el operador / que será la intersección de dos conjuntos.
o Definir el operador – que será la resta de conjuntos (los elementos del primer conjunto menos los que estén en el segundo conjunto).
o El método Vaciar que nos deja el conjunto vacío.
o El método Insertar que nos inserta un nuevo elemento en el conjunto.
o El método Borrar que nos borra un elemento del conjunto.
o El método Contiene que nos dice si el conjunto contiene ya el elemento en cuestión.

Class conjunto
    Private lista As New List(Of Integer)

    Public ReadOnly Property nelementos() As Integer
        Get
            Return (lista.Count)
        End Get

    End Property

    Public ReadOnly Property estavacio() As Boolean
        Get
            If Me.lista Is Nothing Then
                Return False
            Else
                Return True
            End If

        End Get
    End Property

    Public Sub New(ByVal lista As List(Of Integer))
        Me.lista = lista
    End Sub

    Public Sub New()

    End Sub

    Public Shared Operator +(ByVal a As conjunto, ByVal b As conjunto) As conjunto

        Dim nlista As New List(Of Integer)
        Dim n As Integer
        Dim s As New conjunto
        For Each n In a.lista
            s.lista.Add(n)
        Next

        For Each n In b.lista
            If Not nlista.Contains(n) Then
                s.lista.Add(n)
            End If
        Next
        Return s
    End Operator

    Public Shared Operator -(ByVal a As conjunto, ByVal b As conjunto) As conjunto

        Dim nlista As New List(Of Integer)
        Dim n, m As Integer
        Dim s As New conjunto
        n = 0
        m = 0
        While n <= a.lista.Count - 1
            While m <= b.lista.Count - 1
                If a.lista.Item(n) = b.lista.Item(m) Then
                    a.lista.Remove(n)
                    Exit While
                End If
                m += 1
            End While
            n += 1
            m = 0
        End While
        s.lista = a.lista
        Return s
    End Operator

    Public Shared Operator /(ByVal a As conjunto, ByVal b As conjunto) As conjunto

        Dim nlista As New List(Of Integer)
        Dim n, m As Integer
        Dim s As New conjunto
        For Each n In a.lista
            For Each m In b.lista
                If n = m Then
                    s.lista.Add(n)
                End If
            Next
        Next

        Return s
    End Operator

    Public Sub vaciar_conjunto()
        Me.lista.Clear()
    End Sub

    Public Sub inserta_elemento_conjunto(ByVal elemento As Integer)
        Me.lista.Add(elemento)
    End Sub

    Public Sub borrar_elemento_conjunto(ByVal elemento As Integer)
        Dim n As Integer = 0

        While n < Me.nelementos
            If Me.lista(n) = elemento Then
                Me.lista.RemoveAt(n)
            End If
            n += 1
        End While

    End Sub

    Public Function contiene_elemento_conjunto(ByVal elemento As Integer) As Boolean
        Dim n As Integer
        Dim r As Boolean = False
        For Each n In Me.lista
            If n = elemento Then
                r = True
                Exit For
            End If
        Next
        Return r
    End Function

End Class

Module Module1

    Sub Main()
        Dim l1 As New List(Of Integer)
        Dim i As Integer
        For i = 1 To 10
            l1.Add(i)
        Next

        Dim l2 As New List(Of Integer)
        For i = 2 To 32
            l2.Add(i)
        Next

        Dim c1 As conjunto = New conjunto(l1)
        Dim c2 As conjunto = New conjunto(l2)
        Dim c3 As conjunto = New conjunto
        Console.WriteLine("Conjunto A tiene {0} elementos.", c1.nelementos)
        Console.WriteLine("Conjunto B tiene {0} elementos.", c2.nelementos)
        c3 = c1 + c2
        Console.WriteLine("Suma de los 2 conjuntos: {0} elementos.", c3.nelementos)
        c3 = Nothing
        c3 = c1 / c2
        Console.WriteLine("Interseccion de los 2 conjuntos: {0} elementos.", c3.nelementos)
        'vemos si contiene el elemento 8
        Console.WriteLine("Vemos si contiene el elemento 8: " & c3.contiene_elemento_conjunto(8))

        If Not c3.estavacio Then
            Console.WriteLine("Borra el elemento 3 del conjunto."Wink
            c3.borrar_elemento_conjunto(3)
        End If
        Console.WriteLine("Ahora vaciamos un conjunto C. Que tiene {0} elementos.", c3.nelementos)
        c3.vaciar_conjunto()
        Console.WriteLine("Ahora comprobamos el conjunto C. Que tiene {0} elementos.", c3.nelementos)

        Console.WriteLine()
        Console.Write("Resta de conjunto A-B."Wink
        c3 = c1 - c2
        Console.Write(" Resultado: {0} elementos.", c3.nelementos)
        Console.WriteLine()

        Console.ReadKey()

    End Sub

End Module