2016-06-23 7 views
-1

Я пытаюсь изучить VB и зациклился на том, как заставить мои классы работать. Я пытаюсь создать воображаемый магазин для животных. Класс Pet - это мой базовый класс, а Cat - мой производный класс. При попытке выполнить это у меня есть ошибки в отладке и не знаю, как правильно отображать мою информацию из формы после ее запуска. Если у кого есть время взглянуть на мой код и предложить советы о том, как двигаться вперед, это было бы очень признательно.Использование базового класса и производного класса в Visual Basic

животные:

Public Class Pet 

    Private animal As String 
     Private breed As String 
     Private gender As String 
    Private age As Integer 


    Public Property AnimalType() As String 
     Set(ByVal Value As String) 
      animal = Value 
     End Set 
     Get 
      Return animal 
     End Get 
    End Property 

    Public Sub New(ByVal animal As String) 
     Me.animal = animal 
    End Sub 

    Public Property PetBreed() As String 
     Set(ByVal Value As String) 
      breed = Value 
     End Set 
     Get 
      Return Breed 
     End Get 
    End Property 

    Public Sub New(ByVal Breed As String) 
     Me.breed = Breed 
    End Sub 

    Public Property PetGender() As String 
     Set(ByVal Value As String) 
      gender = Value 
     End Set 
     Get 
      Return Gender 
     End Get 
    End Property 

    Public Sub New(ByVal Gender As String) 
     Me.gender = Gender 
    End Sub 

    Public Property PetAge() As Integer 
     Set(ByVal Value As Integer) 
      age = Value 
     End Set 
     Get 
      Return Age 

Cat:

Public Class Cat 
    Inherits Pet 
End Class 

PetShop:

Public Class PetShop 
    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

     Dim pet1 As New Pet("Boggle") 
     Console.WriteLine("Animal: " & pet1.AnimalType & "Breed: " & pet1.PetBreed & "Gender: " & pet1.PetGender & "Age: " & pet1.PetAge) 
     Console.ReadLine() 

    End Sub 
End Class 
+2

«У меня есть ошибки в отладке», это может помочь нам рассказать, что это такое. Ваш класс cat действительно не добавляет и не вносит никаких изменений в базовый класс. У Pet может быть метод MustOverride Speak. Кот перевернул бы его и напечатал Мяу, в то время как Собака, конечно, лаяла. Пол может быть Enum, так что не может войти в «Мне нравится пирог». Порода также может быть Enum на производных классах, чтобы можно было ввести другой набор для собак, кошек, мугавей и попугаев. Возраст должен быть атрибутом ReadOnly, вычисленным из DOB – Plutonix

ответ

0

Вот полный пример для вас, чтобы посмотреть и изучить.

Module Module1 

    Sub Main() 
     Dim cat As Pet = New Cat("Hulk", "none - street cat", "male", #2/1/2005#) 
     Console.WriteLine(cat.ToString) 
     Console.ReadLine() 
    End Sub 


    Public MustInherit Class Pet 

     Public Property Breed As String 
     Public Property Gender As String 
     Public Property DateOfBirth As DateTime 

     Public ReadOnly Property Age As Integer 
      Get 
       Dim a As Integer = DateTime.Now.Year - DateOfBirth.Year 
       Return Convert.ToInt32(If(DateOfBirth.Date > DateTime.Now.Date.AddYears(-a), --a, a)) 
      End Get 
     End Property 

     Public Sub New(breed As String, gender As String, dateOfBirth As DateTime) 
      Me.Breed = breed 
      Me.Gender = gender 
      Me.DateOfBirth = dateOfBirth 
     End Sub 

    End Class 

    Public Class Cat 
     Inherits Pet 

     Public Property Name As String 

     Public Sub New(name As String, breed As String, gender As String, dateOfBirth As DateTime) 
      MyBase.New(breed, gender, dateOfBirth) 
      Me.Name = name 
     End Sub 

     Public Overrides Function ToString() As String 
      Return String.Format("Name:{0}, Breed:{1}, Gender:{2}, DateOfBirth:{3:dd/MM/yyy}, Age:{4}", Name, Breed, Gender, DateOfBirth, Age) 
     End Function 

    End Class 
End Module 
0

Основная проблема с кодом, как он стоит в том, что у вас есть три Public Sub New все, принимая String аргумент. Когда вы используете Dim pet1 As New Pet("Boggle"), находится "Boggle" a AnimalType, a Breed, или Gender? Программа не знает, что вы имеете в виду. Использование Enum s, как предлагал @Plutonix, помогло бы с этим, хотя один конструктор, такой как Public Sub New (ByVal animalType As String, ByVal breed As String, ByVal gender As String), тоже помог бы.

0

Ну, как prprcupofcoffee заявил, что вы не можете перегрузить метод (создать 2 или более методов с тем же именем) и использовать один и тот же номер & тип аргументов.

Итак, если вы всегда можете инициализировать свой класс, используя 3 аргумента, вы можете пойти с prprcupofcoffee ответ. Если вы не можете этого сделать и хотите (по какой-то причине) инициализировать класс, используя любой из трех аргументов (я сомневаюсь, что это требование в вашем случае tho), мне когда-то понадобилось, чтобы в классе, который я создавал и я создал обходной путь для этого .. он может быть применен к классу, как следующее:

Public Const sAnimal As String = "animal" 
Public Const sBreed As String = "breed" 
Public Const sGender As String = "pr" 

Public Sub New(sIdentifier As String, sValue As String) 
    CallByName(Me, sIdentifier, CallType.Set, sValue) 
End Sub 

Итак, теперь вы можете инициализировать класс вроде этого:

Dim myPuppy As New Pet(Pet.sAnimal, "puppy") 

Надежда, которая помогает:)

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