title: Understanding the use of Interfaces and Base Classes
body: <p>I know there are a number of post out there on Interfaces and Base classes, but I'm having a hard time getting the correct design pattern understanding.</p>
  
  <p>If I were to write a reporting class, my initial though would be to create an interface with the core properties, methods, etc. that all reports will implement.</p>
  
  <p>For example:</p>
  
  <pre><code>Public Interface IReportSales
  
  Property Sales() As List(Of Sales)
  Property ItemTotalSales() As Decimal
  
  End Interface
  
  Public Interface IReportProducts
  
  Property Productss() As List(Of Inventory)
  Property ProductsTotal() As Decimal
  
  End Interface
  </code></pre>
  
  <p>Then I assume I would have a class to implement the interface:</p>
  
  <pre><code>Public Class MyReport
  Implements IReportSales
  
  
  Public Property Sales() As System.Collections.Generic.List(Of Decimal) Implements IReportItem.Sales
      Get
          Return Sales
      End Get
      Set(ByVal value As System.Collections.Generic.List(Of Decimal))
          Items = value
      End Set
  End Property
  
  Public Function ItemTotalSales() As Decimal Implements IReport.ItemTotalSales
      Dim total As Decimal = 0.0
      For Each item In Me.Sales
          total = total + item
      Next
  End Function
  
  End Class
  </code></pre>
  
  <p>My thought was that it should be an interface because other reports may not use "Items", this way I can implement the objects that are used for a given report class.</p>
  
  <p>Am I way off? should I have still have just created a base class? My logic behind not creating a base class was that not all report classes may use "Items" so I didn't want to define them where they are not being used.</p>