Archief - [C#] Spelen met generics

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

jimowns

Legacy Member
Ik ben een oefening aan het maken in mijn boek van visual C# - de basis.
Maar ik heb veel problemen met het maken van de oefening, ik snap er eigenlijk niet veel van. ik heb alles herlezen en herlezen in mijn boek en ik blijf evenver staan.

Met de oefening moet ik een interface maken met de naam: Koers ,waarin OpenKoers en SlotKoers kunnen worden opgeslagen.
Deze interface moet ik implementeren in de klassen van aandelenKoers en ObligatieKoers.
Naderhand moet ik een generieke koerswijzeging klassen maken die enkel de objecten accepteerd die de koers interface implementeerd.
instantieer een List<T> klasse en voeg tien verschillende koerswijzegingsobjecten toe. loop door de lijst en toon per bericht of er spraken is van verhoging.


Dit is mijn code.

Code:
namespace Oefenining4._2
{
    // Koers-Interface waar openkoers en slotkoers opgeslagen worden. 
    interface Koers
    {
        void OpenKoers();
        void GeslotenKoers();
    }
    public class AandelenKoers
    {
        // implementeer de interface in aandelenkoers
        public static void OpenKoers() { }
        public static void GeslotenKoers() { }
    }
    public class ObligatieKoers
    {
        // implementeer de interface in ObligatieKoers
        public static void OpenKoers() { }
        public static void GeslotenKoers() { }
    }
    public class KoersWijzeging<T> 
    {
    } 
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

Dank bij voorbaat

NeverwinterX

Legacy Member
De uitleg van wat je nu precies moet doen is mij ook niet duidelijk hoor :p
Plaats misschien eens letterlijk de opgave.

jimowns

Legacy Member
De opgave::

Maak een koers-interface waarin openinskoers en slotkoers kunnen worden opgeslagen. implementeer deze interface vervolgens in een aandelenkoers - en ObligatieKoers-Klasse. Maak een generieke koerswijzegings-klasse die enkel objecten accepteert die de koers-interface implementeren. Instantieer een List<T>- klasse en voeg tien verschillende koerswijzegingsobjecten toe. Loop dan de lijst door en toon per object of er sprake is van een verhoging of verlaging.

jimowns

Legacy Member
Visual C# 2008 - de basis

Bij hoofdstuk 4 object verzamelingen

cG`

Legacy Member
Ik veronderstel dat ze met deze oefening het nut van interfaces willen aantonen, maar eerlijk gezegd is het maar een vreemde oefening.
Ik denk dat dit ongeveer de bedoeling was:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    namespace Oefenining4._2
    {
        public interface Koers
        {
            double OpeningsKoers { get; set; }
            double SlotKoers { get; set; }
        }

        public class AandelenKoers : Koers
        {
            public double OpeningsKoers { get; set; }
            public double SlotKoers  { get; set; }
        }

        public class ObligatieKoers : Koers
        {
            public double OpeningsKoers { get; set; }
            public double SlotKoers { get; set; }
        }

        public class KoersWijzeging
        {
            private List<Koers> koersen;

            public KoersWijzeging()
            {
                this.koersen = new List<Koers>();
            }

            public void VoegKoersToe(Koers koers)
            {
                koersen.Add(koers);       
            }

            public void ToonOverzicht()
            {
                foreach (var koers in koersen)
                {
                    var koersVerschil = koers.SlotKoers - koers.OpeningsKoers;

                    Console.Write("OpeningsKoers: " + koers.OpeningsKoers);
                    Console.Write(", SlotKoers: " + koers.SlotKoers);

                    if (koersVerschil > 0)
                    {
                        Console.Write(" (Verhoging)");  
                    }
                    else if (koersVerschil < 0)
                    {
                        Console.Write(" (Verlaging)");                        
                    }
                    else
                    {
                        Console.Write(" (Onveranderd)");    
                    }
                    Console.WriteLine();
                }
            }
        }

        class Program
        {
            static void Main(string[] args)
            {
                var aandelenKoersEen = new AandelenKoers();
                aandelenKoersEen.OpeningsKoers = 10;
                aandelenKoersEen.SlotKoers = 30;

                var aandelenKoersTwee = new AandelenKoers();
                aandelenKoersTwee.OpeningsKoers = 10;
                aandelenKoersTwee.SlotKoers = 10;

                var obligatieKoersEen = new ObligatieKoers();
                obligatieKoersEen.OpeningsKoers = 20;
                obligatieKoersEen.SlotKoers = 5;

                var koersWijzeging = new KoersWijzeging();
                koersWijzeging.VoegKoersToe(aandelenKoersEen);
                koersWijzeging.VoegKoersToe(aandelenKoersTwee);
                koersWijzeging.VoegKoersToe(obligatieKoersEen);

                koersWijzeging.ToonOverzicht();

                /*
                Resultaat:
                OpeningsKoers: 10, SlotKoers: 30 (Verhoging)
                OpeningsKoers: 10, SlotKoers: 10 (Onveranderd)
                OpeningsKoers: 20, SlotKoers: 5 (Verlaging)
                */
            }
        }
    }
}

PS. Ik denk niet dat je de KoersWijzeging klasse zelf echt "generiek" moest maken, maar dus gewoon gebruiken maken van de generieke versie van de List klasse zoals ik gedaan heb (het heeft weinig nut om de klasse zelf generiek te maken).

Akseeel

Legacy Member
Dit is wel erg basis hoor :P
Ik leer van internet , daar leggen ze het met hun eigen woorden uit , veel makkelijker :)

jimowns

Legacy Member
De oefening met interfaces heb ik al gedaan en gezien in Object orienterd Hoofdstukje 3.

Nu ik de code zowat bekijk is het een beetje chinees voormij.
de var en foreach code, maar dat zal ik eens bekijken op msdn ;).

@Akseeel
Van welke website leer je dan uit ? Want het boek dat ik heb, zit raar in elkaar vind ik.

NeverwinterX

Legacy Member
jimowns zei:
De oefening met interfaces heb ik al gedaan en gezien in Object orienterd Hoofdstukje 3.

Nu ik de code zowat bekijk is het een beetje chinees voormij.
de var en foreach code, maar dat zal ik eens bekijken op msdn ;).

@Akseeel
Van welke website leer je dan uit ? Want het boek dat ik heb, zit raar in elkaar vind ik.

Foreach is een wat nettere versie om over een collectie (zoals List) te lopen. "foreach (var koers in koersen)" loopt over alle elementen in de collectie "koersen": "koers" bevat per iteratie zo een element en kan je dus gebruik binnenin de for loop.
"var" kan je gebruiken als je te lui bent om een type in te vullen: "foreach (Koers koers in koersen)" had even goed gekund (en is duidelijker).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan