Interface - statická metoda – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Interface - statická metoda – .NET – Fórum – Programujte.comInterface - statická metoda – .NET – Fórum – Programujte.com

 

Miloš
~ Anonymní uživatel
25 příspěvků
3. 10. 2011   #1
-
0
-

Dobrý den,

zajímalo by mě jestli je možné nějakým způsobem definovat, aby každá odvozená třída od BarcodeBase měla statickou metodu IsValid. Všude čtu, že to nejde a proto mě zajímá jestli něco podobného neřeší nějaký návrhový vzor. Je jednoduché tuto funkci připsat do každé odvozené třídy a pak jí volat, ale snad to půjde vyřešit nějak lépe :) - vůbec netuším jak a nějak cítím, že se na problém koukám ze špatného úhlu :)

Děkuji

Miloš

   public interface IBarcode
    {
        string GTIN { get; }
    }

    public abstract class BarcodeBase : IBarcode
    {
        protected int symbology;
        public string GTIN { get; protected set; }

        public BarcodeBase(int symbology, string barcodeText)
        {
            this.symbology = symbology;
            GTIN = barcodeText;
        }
    }

    public class EAN128 : BarcodeBase
    {
        public EAN128(int symbology, string barcodeText) :
            base(symbology, barcodeText)
        {
        }

        public static bool IsValid(int symbology, string barcodeText)
        {
            return (symbology == 15);
        }
    }

    public class EAN13 : BarcodeBase
    {
        public EAN13(int symbology, string barcodeText) :
            base(symbology, barcodeText)
        {
        }

        public static bool IsValid(int symbology, string barcodeText)
        {
            return (symbology == 5);
        }
    }

    public static class BarcodeMgt
    {
        public static IBarcode GetBarcode(int symbology, string barcodeText)
        {
            if (EAN128.IsValid(symbology, barcodeText))
                return new EAN128(symbology, barcodeText);
            if (EAN13.IsValid(symbology, barcodeText))
                return new EAN13(symbology, barcodeText);

            return null;
        }
    }
Nahlásit jako SPAM
IP: 194.228.205.–
3. 10. 2011   #2
-
0
-

#1 Miloš
V C# nejsem kovany, ale co treba zkusit tu statickou funkci dat primo do te abstraktni tridy... A udelat tam i to vyhodnocovani? Pote by tu metodu kazdy potomek podedil a hotovo. Ma to jen nevyhodu ze to vyhodnocovani by muselo byt v te abstraktni tride a pokud je tam pozadavek ze to ma byt staticka metoda tak nelze v potomcich prekryt.

    public abstract class BarcodeBase : IBarcode
    {
        protected int symbology;
        public string GTIN { get; protected set; }

        public BarcodeBase(int symbology, string barcodeText)
        {
            this.symbology = symbology;
            GTIN = barcodeText;
        }

       public static bool IsValid(int symbology, string bacrodeText)
        {
           /* vyhodnoceni */
 

           return true; 
        }

    }

Ale ja osobne bych static vubec nepouzival pokud se nejedna o jedinacka apodobne veci.

Nevim, zda jsem ti pomohl, snad zkusenejsi Ceckari sem taky neco prihodi.

Nahlásit jako SPAM
IP: 195.122.223.–
3. 10. 2011   #3
-
+1
-
Zajímavé

Ani jeden z přístupů není rozumný a ani dost dobře možný. Myslím, že nejlepší bude oddělit reprezentaci čárového kódu a jeho validaci. Tj. bude existovat interface IBarCode a IBarCodeValidator, který bude mít ne-statickou metodu Validate.

Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

Podobná vlákna

Staticka metoda — založil jonhnw

Abstraktni staticka metoda — založil Dusan R.

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý