C# Type "Type-pal" lennel dolgom, mint metódus paraméterrel, valaki tud segíteni?
Szóval a célom az lenne hogy létrehozok egy (kostruktor) metódust ami így nézne ki:
public Player(Type shipType) { ... }
a példa kedvéért:
public class Ship
public partial class SmallShip : Ship
public partial class NormalShip : Ship
public partial class BigShip : Ship
1. Az első problémám hogy nemtudom kiolvasni a shipType változót:
if (shipType == SmallShip) { ... } > erre azt írja hogy a SmallShip nem változó, hanem típus, rosszul használom.
2. A második problematikám meg az lenne hogy csak olyan Type-ot lehessen megadni paraméterként ami a Ship typeon belül van, tehát Ship,Smallship,Normalship,Bigship-et, vagy úgy mégjobb lenne ha még a Ship-et se, csak az al-class-eit.
Esetleg ha még erre is tudja valaki a választ: A Player class tartalmas ez Ship változót, ami az űrhajó amit megjelenít a játék (XNA 2D). A Ship class nagyon sok altípust tartalmaz, és mindnek ugyanolyan kostruktormetódusa van. Jólenne ha bármilyen Ship class-t írok be paraméterként azt létrehozza valahogy így:
public Player([Type > in Ship] shipType)
{
this.TheShip = new shipType(xyz);
}
Olvastam hogy egy kérdésben csak 1 dolgot tegyek fel, de ezek egybe tartoznak szerintem.
Ha valaki tud segíteni nagyon megköszönném!!!
public Player(Type shipType) helyett:
public Player(Ship shipType);
if (shipType == SmallShip)
ha valamiről meg akarod állapírani, hogy SmallShip a típusa vagy sem, akkor azt valahogy így kell:
object.GetType() == typeof(SmallShip)
amit az első válaszoló írt az jó. ha mindenképp Typeot szeretnél átadni, akkor így nézhet ki a constructorod:
public Player(Type shipType)
{
this.TheShip = (Ship)Activator.CreateInstance(shipType);
}
hívni:
new Player(typeof(SmallShip))
Persze ekkor nem csak Ship típust lehet megadni.
A konstruktorban esetleg a Type.IsSubclassOf vagy Type.IsAssignableFrom-mal el lehet dönteni futásidőben, de ez nem túl szép.
Én a helyedben készítenék egy ShipType enumot, és azt adnám át.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!