Schalter mit Objekt-Instanzen

Bearbeiten

Hier ist eine andere version von dem code, das macht es ein wenig mehr klar, was ich versuche zu tun:

class Program
{
    static void Main(string[] args)
    {
        RepairCar(Car.Ferrari);
    }

    public static void RepairCar(Car BrokenCar)
    {
        switch (BrokenCar)
        {
            case Car.Ferrari:
                Console.WriteLine("${0} of Insurance Needed", CalculateInsurance(BrokenCar));
                //
                //Repair Algorithm Here
                //
                break;

            case Car.BMW:
                Console.WriteLine("${0} of Insurance Needed", CalculateInsurance(BrokenCar));
                //
                //Repair Algorithm Here
                //
                break;

            case Car.Audi:
                Console.WriteLine("${0} of Insurance Needed", CalculateInsurance(BrokenCar));
                //
                //Repair Algorithm Here
                //
                break;

            default:
                Console.WriteLine("${0} of Insurance Needed", CalculateInsurance(BrokenCar));
                //
                //Repair Algorithm Here
                //
                break;
        }
    }

    public static double CalculateInsurance(Car BrokenCar)
    {
        return (BrokenCar.Price / 10);
    }

}

public class Car
{
    public double Price;
    public int MaxSpeed;
    public int MinSpeed;

    public Car(double Price, int MaxSpeed, int MinSpeed)
    {
        this.Price = Price;
        this.MaxSpeed = MaxSpeed;
        this.MinSpeed = MinSpeed;
    }

    public static Car Ferrari = new Car(100000, 250, 10);
    public static Car Audi = new Car(50000, 120, 30);
    public static Car BMW = new Car(35000, 80, 75);
}

Wie geschrieben, dieser Code wird nicht kompiliert, weil es wird nicht lassen Sie mich schalten Sie die BrokenCar in der RepairCar-Methode. Irgendwelche Vorschläge?

Original Post

Ich versuche, ein Objekt zu erstellen, speichern statische Eigenschaften und, noch wichtiger geschaltet werden kann, über - hier ein Beispiel -

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(GetMaxSpeed(Car.Ferrari));
        Console.ReadLine();
    }

    public static int GetMaxSpeed(Car ModelType)
    {
        switch (ModelType)
        {
            case Car.Ferrari:
                return Car.Ferrari.MaxSpeed;

            case Car.VW:
                return Car.VW.MaxSpeed;

            case Car.AstonMartin:
                return Car.AstonMartin.MaxSpeed;
        }
    }

    public class Car
    {
        public int MinSpeed;
        public int MaxSpeed;

        public Car(int MinSpeed, int MaxSpeed)
        {
            this.MinSpeed = MinSpeed;
            this.MaxSpeed = MaxSpeed;
        }

        public static Car Ferrari = new Car(30, 240);
        public static Car VW = new Car(10, 50);
        public static Car AstonMartin = new Car(75, 180);
    }

}

Hat jemand irgendwelche Ideen?

Vielen Dank im fortgeschrittenen!

William

BEARBEITEN

In diesem Beispiel wird ein größeres, Komplexes system. Um zu veranschaulichen, warum ich das hätte tun müssen, es auf diese Weise, sehen Sie das folgende update:

    public static void OnCarSale(Car CarSold)
    {
        double LuxuryTax = 75;

        switch (CarSold)
        {
            case Car.Ferrari:
                Console.WriteLine("Total Price: {0}", Car.Ferrari.Price + LuxuryTax);
                break;

            case Car.VW:
                Console.WriteLine("Total Price: {0}", Car.VW);
                break;

            case Car.AstonMartin:
                Console.WriteLine("Total Price: {0}", Car.Ferrari.Price + LuxuryTax);
                break;
        }
    }

Dies würde zu erhalten, genannt, die durch ein Ereignis außerhalb dieser Klasse -

a) Was ist die Frage? b) Warum brauchen Sie diese (es scheint wie eine seltsame Sache zu tun)?
Können Sie nicht einfach return ModelType.MaxSpeed? Ist es ausdrücklich verboten?

InformationsquelleAutor William | 2011-10-31

Schreibe einen Kommentar