Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Luokan metodin kutsuminen merkkijonolla

ari kood [16.11.2021 09:55:24]

#

Hei,

Olen rakentamassa automaatio systeemiä CAD/CAM ohjelmaan.
Kyseessä on reikien tunnistus 3d-mallista.

Minulla on eri reikätyypeille luotuna omat luokat (joita on paljon ja hyvin eri tyyppisiä) kuten;

Public Class Portti_G14
   Implements IPortti

   'Palauttaa True jos reikä mätsää.
   Public Function Match(Feature As HolesFeature) As Boolean Implements IPortti.Match
      If Feature.Diameter = 15.6 and _
         Feature.BoreDiameter = 22.2 Then
         Return True
      Else
         Return False
      End If

   End Function
End Class

Lisäksi minulla on tunnistusluokka joka näkyy itse CAD/CAM systeemissä

<Browsable(True)>
Public Class AAB_Recognition
	Inherits ExpressionBase

   Public Shared Function Match(HoleType As String, Feature As HolesFeature) As Boolean
	'Tässä olen aluksi käyttänyt ihan vaan:
	'Select Case HoleType
	'	Case "Portti G1/4"
	'		Dim p as new Portti_G14
	'		Return p.match(feature)
	'	Case "CAV 06-3"
	'		Dim p as new CAV_063
	'		Return p.match(feature)
	'End Select

	'Mutta haluaisin simppelimmän keinon kutsua Holetypeä vastaavan luokan Match funtiota kuten esim;
	Return HoleType_Luokka.Match(Feature)
	'Mutta en keksi keinoa kutsua oikeaa luokkaa merkkijonon perusteella

   End Function



End Class

Jos vain voisin jotenkin luoda jonkinlaisen "luettelon" ABB_Recognition luokan alkuun, kuten:

Enum eHoleClass
	"Portti G1/4" = New Portti_G14
	"CAV 06-3" = New CAV_063
End Enum
'Mutta eihän tämä näin toimi...

Siis CAD/CAM ohjelmassa kutsun esim näin Iif(AAB_Recognition.Match("Portti G1/4",Feature),<tee jotain>,<Tee jotain muuta>)

Toivottavasti joku hoksaa mitä tarkoitan. Toki kaikki muutkin ajatukset tuon toteuttamiseen otetaan vastaan...

Grez [16.11.2021 11:42:21]

#

Jos teet Enumin asemesta Dictionaryn:

Public Shared eHoleObjectByString = New Dictionary(Of String, IPortti) From {
  {"Portti G1/4", New Portti_G14()},
  {"CAV 06-3", New CAV_063()}
}

Niin sitten voit käyttää kaipaamallasi tavalla:

Return eHoleObjectByString(holeType).Match(Feature)

ari kood [16.11.2021 13:13:08]

#

Jees, kiitos. Toimii hienosti!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta