Származtatás (Frissítve)

Filed Under (kód) by nameless on 18-07-2009

Tagged Under :

Származtatás:

using System;
 
namespace Program
{
    class Car
    {
        public readonly int maxSpeed;
        private int currSpeed;
 
        public Car(int max)
        {
            maxSpeed = max;
        }
        public Car()
        {
            maxSpeed = 55;
        }
 
        public int Speed
        {
            get { return currSpeed; }
            set
            {
                currSpeed += value;
                if (currSpeed > maxSpeed)
                {
                    currSpeed = maxSpeed;
                }
            }
        }
    }
    class Minivan : Car
    {
 
    }
    class MainClass
    {
        public static void Main()
        {
            Car myCar = new Car(292);
            myCar.Speed = 300;
            Console.WriteLine("My car is going {0} KMH", myCar.Speed);
 
            Minivan myVan = new Minivan();
            myVan.Speed = 50;
            Console.WriteLine("Minivan speed is {0} KMH", myVan.Speed);
 
            Console.ReadKey();
        }
    }
 
}

Ebben a példában látható, hogy a Minivan származtatott osztály hozzáfér az ősosztály minden tagjához, így neki is beállíthatjuk a sebességét…

Egészítsük ki még az alábbi kódot, egy rádió (lezárt) osztállyal, ami azt mutatja meg, hogy be van-e kapcsolva a rádió:

using System;
 
namespace Program
{
    sealed class Radio
    {
        public void Power(bool turnOn)
        {
            Console.WriteLine("Radio on: {0}", turnOn);
        }
    }
 
    class Car
    {
        public readonly int maxSpeed;
        private int currSpeed;
 
        private Radio myRadio = new Radio();
        public void TurnOnRadio(bool onOff)
        {
            //Hívás továbbítása a belső objektumnak
            myRadio.Power(onOff);
        }
 
        public Car(int max)
        {
            maxSpeed = max;
        }
        public Car()
        {
            maxSpeed = 55;
        }
 
        public int Speed
        {
            get { return currSpeed; }
            set
            {
                currSpeed += value;
                if (currSpeed > maxSpeed)
                {
                    currSpeed = maxSpeed;
                }
            }
        }
    }
    class Minivan : Car
    {
 
    }
    class MainClass
    {
        public static void Main()
        {
            Car myCar = new Car(292);
            myCar.Speed = 300;
            myCar.TurnOnRadio(true);
            Console.WriteLine("My car is going {0} KMH", myCar.Speed);
 
            Minivan myVan = new Minivan();
            myVan.Speed = 50;
            myVan.TurnOnRadio(false);
            Console.WriteLine("Minivan speed is {0} KMH", myVan.Speed);
 
            Console.ReadKey();
        }
    }
 
}

Egy komplett kód, ami bemutatja a base kulcsszó használatát és a származtatás lényegét:

using System;
namespace Car
{
    class Auto
    {
        protected int currSpeed, currManeuverability, currBreak;
        protected string currBrand;
 
        public Auto() { }
 
        public Auto(int speed, int Maneuverability, int Break, string Brand)
        {
            currSpeed = speed;
            if (Maneuverability > 100)
            {
                currManeuverability = 100;
            }
            else
                currManeuverability = Maneuverability;
            currBreak = Break;
            currBrand = Brand;
        }
        public virtual void DisplayInfo()
        {
            Console.WriteLine("\nAz auto markaja: {0}", currBrand);
            Console.WriteLine("Az auto sebessege: {0}km/h", currSpeed);
            Console.WriteLine("Az auto iranyithatosaga (max100): {0}", currManeuverability);
            Console.WriteLine("Az auto fekezese 100km/h-rol: {0} masodperc", currBreak);
        }
 
    }
 
    class SportAuto : Auto
    {
 
        private int currSpeedAfterNitro;
        public SportAuto() { }
        public SportAuto(int speed, int Maneuverability, int Break, string Brand, int nitro)
            : base(speed, Maneuverability, Break, Brand)
        {
            currSpeedAfterNitro = speed + nitro;
        }
        public override void DisplayInfo()
        {
            base.DisplayInfo();
            Console.WriteLine("Az auto sebessege nitro kozben: {0}km/h\n", currSpeedAfterNitro);
        }
    }
 
    class LuxusAuto : Auto
    {
        private int currBreakAfterABSon;
        public LuxusAuto() { }
        public LuxusAuto(int speed, int Maneuverability, int Break, string Brand, int ABSslow)
            : base(speed, Maneuverability, Break, Brand)
        {
            currBreakAfterABSon = Break - ABSslow;
        }
        public override void DisplayInfo()
        {
            base.DisplayInfo();
            Console.WriteLine("Az auto fekezese 100km/h-rol ABS bekapcsolasa utan: {0} masodperc\n", currBreakAfterABSon);
        }
    }
 
    class MainClass
    {
        public static void Main()
        {
            Auto szuzuki = new Auto(180, 12, 36, "Szuzuki");
            szuzuki.DisplayInfo();
 
            Auto skoda = new Auto(198, 10, 45, "Skoda");
            skoda.DisplayInfo();
 
            Auto other_data = new Auto();
 
            SportAuto ferrari = new SportAuto(320, 88, 7, "Ferrari", 40);
            ferrari.DisplayInfo();
 
 
            LuxusAuto mercedes = new LuxusAuto(280, 79, 8, "Mercedes", 3);
            mercedes.DisplayInfo();
 
 
            Console.ReadKey();
        }
    }
}

Van még egy lehetőség az öröklésre… A “van egy” lehetőség: (tartalmazás és delegálás)

using System;
namespace program
{
    class BenfitPackage
    {
        public double ComputePayDeDuction()
        {
            return 1225.0;
        }
    }
 
    partial class Employee
    {
        protected BenfitPackage empBenfits = new BenfitPackage();
 
        public double GetBenfitCost()
        { return empBenfits.ComputePayDeDuction(); }
 
        public BenfitPackage Benfits
        {
            get { return empBenfits; }
            set { empBenfits = value; }
        }
 
        protected int currage;
        public Employee(int age)
        { currage = age; }
 
        public virtual void DisplyInfo()
        {
            Console.WriteLine("The employee age: {0}\n", currage);
        }
    }
    class Managar : Employee
    {
        private int Mtime;
        public Managar(int age, int ManagerTime)
            : base(age)
        { Mtime = ManagerTime; }
 
        public override void DisplyInfo()
        {
            Console.WriteLine("The Maneger age: {0}", currage);
            Console.WriteLine("He deal with Manager: {0}\n", Mtime);
        }
    }
 
    class SalesPerson : Employee
    {
        private string SellThings;
        public SalesPerson(int age, string sell)
            : base(age)
        { SellThings = sell; }
 
        public override void DisplyInfo()
        {
            Console.WriteLine("The Sales person age: {0}",currage);
            Console.WriteLine("He sell: {0}\n",SellThings);
        }
    }
 
    sealed class PTSalesPerson : SalesPerson
    {
        public PTSalesPerson(int age, string sell)
            : base(age, sell)
        {}
    }
 
    class MainClass
    {
        public static void Main()
        {
            Employee Norbert = new Employee(26);
            Norbert.DisplyInfo();
 
            Managar Karoly = new Managar(36, 14);
            Karoly.DisplyInfo();
 
            SalesPerson Jones = new SalesPerson(46, "Bike");
            Jones.DisplyInfo();
 
            double cost = Jones.GetBenfitCost();
            Console.WriteLine("cost: {0}", cost);
 
            Console.ReadKey();
        }
    }
}

Post a comment