2015-01-03 3 views
-1

Давайте начнем с примера модуля:Как сохранить конструктор «Новый» в подклассах?

Module PuppyKillers 
    Public Puppies As Double = 135 
    Public SquadSize As Integer = 5 
    Class PuppyKiller 
     Private KillingTimer As New System.Timers.Timer _ 
      With {.AutoReset = True, .Interval = 1000, .Enabled = False} 
     Public PuppiesPerSecond As Double = 0.5 
     Public name As String = "John Doe" 
     Public Sub New(Optional param As Double = 1) 
      PuppiesPerSecond = PuppiesPerSecond * param 
      AddHandler KillingTimer.Elapsed, AddressOf KillPuppies 
     End Sub 
     Private Sub KillPuppies(ByVal sender As Object, _ 
           ByVal e As System.Timers.ElapsedEventArgs) 
      If Puppies <= 0 Then 
       Me.Killing = False 
      Else 
       Puppies -= PuppiesPerSecond 
      End If 
     End Sub 

     Property Killing As Boolean 
      Get 
       Return KillingTimer.Enabled 
      End Get 
      Set(value As Boolean) 
       KillingTimer.Enabled = value 
      End Set 
     End Property 
    End Class 

    Class ChiefPuppyKiller 
     Inherits PuppyKiller 
    End Class 

    Sub Exterminators_Start() ' 4 Killers + 1 Chief 
     Dim squad As New ArrayList 

     REM The following line prevents the compilation. 
     squad.Add(New ChiefPuppyKiller(3)) 'A chief kills 3 times the normal amount. 

     For i As Integer = 1 To SquadSize - 1 
      squad.Add(New PuppyKiller) 
     Next 

     REM Start the slaughter 
     Console.WriteLine("Puppies: " & Puppies) 
     For Each c As PuppyKiller In squad 
      c.Killing = True 
     Next 
     Do 
      Threading.Thread.Sleep(4737) 
      Console.WriteLine("Remaining Puppies: " & Math.Ceiling(Puppies)) 

      Application.DoEvents() 
      If Puppies = 0 Then 
       Console.WriteLine("Meow: No more puppies.") 
       Exit Do 
      End If 
     Loop 
    End Sub 
End Module 

У меня есть проблемы с выше блока кода: я не могу найти способ использовать Конструктор PuppyKiller «s из его подклассов: ChiefPuppyKiller в этом случае.

У меня возникла ошибка в отношении количества параметров для конструктора, поэтому я предполагаю, что конструктор базового класса не используется.

Я не хочу объявлять новый подкласс New для каждого подкласса. Но я хотел бы иметь возможность указать множитель убийства щенка в конструкторе.


Примечание: ни одно животное не пострадали во время написания этого вопроса, так как код не компилируется.

ответ

1

Вы будете иметь, чтобы добавить новый конструктор для каждого класса, в котором вы хотите передать это значение в:

Class ChiefPuppyKiller 
    Inherits PuppyKiller 

    Public Sub New(param As Double) 
    MyBase.New(param) 
    End Sub 
End Class 
+0

Я надеялся, не имея для этого ... – beppe9000

Смежные вопросы