Wywołaj metodę, która wymaga instancji klasy pochodnej wpisanej jako klasa bazowa w VB.NET lub C #

Mam dwa obiekty - „Statek kosmiczny” i „Planeta” wywodzące się z bazy „Obj”. Zdefiniowałem kilka klas - Okrąg, Trójkąt, Prostokąt itd., Które dziedziczą po klasie „Kształt”.

Do celów wykrywania kolizji chcę nadać Objowi „kształt”:

Dim MyShape as Shape

Aby w „Spaceship” mogłem:

MyShape = new Triangle(blah,blah)

iw „Planecie” mogę:

MyShape = new Circle(blah,blah)

Mam metodę (przeciążoną kilka razy), która sprawdza kolizje między różnymi kształtami, na przykład:

public shared overloads function intersects(byval circle1 as circle, byval circle2 as circle) as boolean

I

public shared overloads function intersects(byval circle as circle, byval Tri as triangle) as boolean

Działa to dobrze, gdy wywołam funkcję przy użyciu klas pochodnych, na przykład:

dim A as new circle(blah, blah)
dim B as new triangle(blah, blah)
return intersects(A,B)

Ale kiedy nazywam go MyShape, pojawia się błąd, ponieważ metoda przekazuje „Kształt” (a nie typ wyprowadzony), dla którego metoda nie ma przeciążenia.

Mogę to rozwiązać, robiąc coś takiego:

Public Function Translate(byval MyShape1 as Shape, byval MyShape2 as Shape )as boolean
if shape1.gettype = gettype(circle) and shape2.gettype=gettype(circle) then ''//do circle-circle detection
if shape1.gettype = gettype(triangle) and shape2.gettype=gettype(circle) then ''//do triangle-circle detection
End Function

Ale to wydaje się bałaganiarskie. Czy jest lepszy sposób?

questionAnswers(2)

yourAnswerToTheQuestion