350 messaggi dal 08 febbraio 2009
Salve a tutti.

Sto cercando di implementare un gestore di stampe. Siccome posso stampare i documenti in "modi" diversi (verbo PrintTo, mandare il file direttamente in stampa, aprire applicazione e stampare,...), volevo creare un'interfaccia del tipo:


interface IPrintDocumentHelper
{
    static bool Print (MyDocument doc, MyPrinter printer);
}




Solo che nelle interfacce non mi accetta il valore "static".
Inoltre, volevo anche utilizzare il tutto in una switch, come nel seguente esempio:


IPrintDocumentHelper printHelper;
switch (estensione)
{
    case "PDF":
        printHelper = PrintPdfHelper;
        break;
    case "PCL":
        printHelper = PrintPclHelper;
        break;
    default:
        printHelper = PrintDefaultHelper;
        break;
}
if (printHelper.Print(doc, printer)
{
    ... stampa corretta...
}
else
{
   ... stampa errata ...
}





Come mi conviene gestire il tutto utilizzando comunque il metodo Print come static?

Grazie mille!
Riflettici un attimo e capirai che il concetto di static su un'interfaccia è un controsenso! Static si riferisce al tipo, se usi il tipo non puoi usare l'interfaccia, quindi non va bene! Occhio inoltre che il tuo codice è anche sintatticamente errato, perché nello switch vuoi assegnare un tipo a una variabile di tipo IPrintDocumentHelper.

Nel tuo caso risolvi con un banale metodo d'istanza:
interface IPrintDocumentHelper
{
bool Print (MyDocument doc, MyPrinter printer);
}

IPrintDocumentHelper printHelper;
switch (estensione)
{
case "PDF":
printHelper = <b>new PrintPdfHelper()</b>;
break;
case "PCL":
printHelper = <b>new PrintPclHelper()</b>;
break;
default:
printHelper = <b>new PrintDefaultHelper()</b>;
break;
}
if (printHelper.Print(doc, printer)
{
... stampa corretta...
}
else
{
... stampa errata ...
}


Ciao,
m.
350 messaggi dal 08 febbraio 2009
Grazie.

Nel mio esempio so che il codice era "errato" (non sapendo come fare ho messo delle cose a caso tanto per cercare di spiegare).

L'implementazione da te fatta era la medesima che immaginavo io senza usare lo static.

Però è vero che per stampare un documento, non ho bisogno di sapere altro. Per cui vedevo bene il metodo come "statico".

A questo punto posso anche lasciare il mio codice come l'ho scritto io nel progetto (ovvero dentro alla switch richiamo direttamente i metodi statici e non ho interfaccia).

Ora però mi è venuta in mente un'altra implementazione che però chiedo se è fattibile in un altro post (più adeguato)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
In primo piano

I più letti di oggi

Media
In evidenza
MISC