Új hozzászólás Aktív témák

  • pmonitor

    aktív tag

    válasz pmonitor #10083 üzenetére

    Ha jól emléxem, akkor már többször linkeltem be ezt a linket. Ez a másik fórumról való. Ott oldottam meg. Maga a kód(ami nem működik:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace GenericTest
    {
    interface ITorol
    {
    void delete();
    }

    class GenerikusTipus<T>
    {
    T adat;

    public GenerikusTipus(T adat)
    {
    this.adat = adat;
    }

    public T GetErtek()
    {
    return adat;
    }

    public void TorlunkHaTudja()
    {
    if (adat is ITorol)
    (adat as ITorol).delete();
    }
    }

    struct Valami : ITorol
    {
    public int ertek;

    public Valami(int ertek)
    {
    this.ertek = ertek;
    }

    public void delete()
    {
    ertek = 0;
    }

    new public string ToString()
    {
    return ertek.ToString();
    }
    }

    class Program
    {
    static void Main(string[] args)
    {
    Valami v = new Valami(5);
    GenerikusTipus<Valami> genTip = new GenerikusTipus<Valami>(v);
    Console.WriteLine(genTip.GetErtek().ToString());
    genTip.TorlunkHaTudja();
    Console.WriteLine(genTip.GetErtek().ToString());
    Console.ReadKey();
    }
    }
    }

    A "megoldásom":
    Az as operátor ugye csak referencia, ill. nullabe típusok esetén működik. Tehát akkor az adott típust ki kell tenni object-be(ami ugyebár referencia típus), ez már magában hordozza a "metaadatokat" is. Na most így már alkalmazhatónak kell lennie az object példányra az as operátornak. Viszont a végén az adat-ba be kell tenni a kapott értéket.

    if (adat is ITorol)
    {
    object o = adat;
    (o as ITorol).delete();
    adat = (T)o;
    }

    Ez érdekességnek jó, de "élesben" nem igazán használnám...

    Ha ezt a kódot(és a megoldást) valaki becsülettel megnézi, akkor egyértelműen látszik, hogy a metódusok 1 boxingolt típussal(másolattal) dolgoznak. Ezért van az, hogy az o objectet a törlés után vissza kell tenni az aktuális mezőbe. Az érték típusok csak az alapműveletek esetén(*/+-) nagyon gyorsak. metódushívás esetén nagyon lassú.

    http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php

Új hozzászólás Aktív témák