2013-07-21 13 views
5

Ho appena deciso di giocare con PCL e ho convertito la mia libreria di classi in PCL.Quali sono le decisioni dietro la disponibilità del tipo per una piattaforma particolare?

Non sorprende che non possa essere costruito mostrando molti errori di tipo mancanti.

Ma quello che mi ha veramente confuso è in base a quali tipi mancano.

CancelEventArgs classe supportata ma non lo è CancelEventHandler.

È questa una semplice possibilità o una decisione deliberata di non includere un particolare tipo? Posso estrarre informazioni utili sulla progettazione di piattaforme dal fatto di tipo presenze o assenze?

Vorrei chiarire:

posso capire i casi in cui troppo specifica piattaforma concetti vengono rimossi.

Ma con PCL le cose non sono molto chiare per me.

Mi sono abituato a non pensarmi più intelligente degli altri, quindi cerco ragioni chiare.

Per rendere il tipo comune impostato il più grande possibile è facilitare la migrazione tra le piattaforme. Come afferma Eric Lippert, ogni funzionalità deve essere giustificata dal punto di vista del rapporto valore/spese. Quindi, o sopravvalutato il valore di un set di caratteri di grandi dimensioni o sottovaluto le difficoltà di implementare la sua portabilità.


Per quanto riguarda gli eventi specifici che eseguono l'analisi del codice ha dato una raccomandazione suono per utilizzare la versione genreic EventHandler<TEventArgs>

Un altro simile question.

risposta

7

È un processo piuttosto meccanico. Basta intersecare il set di tipi disponibili in ciascuna delle piattaforme selezionate per il progetto PCL. Rimuovi ogni tipo che non è disponibile in uno dei bersagli. Quello che ti rimane è ciò che puoi usare.

CancelEventHandler potrebbe sembrare una strana omissione, fino a dare un'occhiata più da vicino al tipo. Ha un attributo, HostProtectionAttribute non è ampiamente supportato.

Quindi PCL ti aiuta solo a evitare "oh sparare!" momento in cui ti sei fortemente impegnato a utilizzare un tipo in una libreria di classi. Per scoprire in seguito che non puoi far funzionare la tua biblioteca su un altro obiettivo. È molto brutto, potenzialmente distruggendo un sacco di tempo speso per scrivere e testare il codice. Fare un testa a testa su quel problema può farti risparmiare un'enorme quantità di dolore e sofferenza.

Ovviamente, ciò non funziona in realtà quando si esegue il percorso sbagliato, convertendo un normale progetto di libreria di classi in un progetto PCL. Questo è un rapido "oh shoot!", E non ha nulla a che fare con le limitazioni in PCL, ma almeno saprai su cosa concentrarti e ottenere un'impressione decente di quanto lavoro hai davanti.

1

Lo copro un po 'nella sezione "Perché le API non sono portatili" di this blog post.

Quando stavamo lavorando su Librerie di classi portatili, .NET 4, Silverlight e Windows Phone 7 erano finiti o quasi terminati, quindi non potevamo apportare molte modifiche per supportare API più portatili. Con .NET 4.5,.NET per le app di Windows Store e Windows Phone 8, siamo stati in grado di fare molto di più per supportare PCL. Quasi tutti i tipi .NET in .NET per le app di Windows Store sono disponibili in PCL che utilizzano .NET 4.5 e .NET per le app di Windows Store. Windows Phone 8 supporta anche la maggior parte di queste API e il divario più grande è stato HttpClient, che abbiamo filled with a NuGet package.

Quindi, in sostanza, se si targetizzano le piattaforme più recenti, molti altri tipi saranno portatili e con il passare del tempo dovrebbe continuare a migliorare.

+0

Grazie, Daniel. Consiglieresti di creare librerie di helper come PCL sin dall'inizio? dicendo 'helper libray' intendo una libreria che generalmente contiene metodi di estensione per enumerabili e altre cose del genere. –

+0

@voroninp Se ci sono API che è necessario implementare facilmente in una libreria helper, procedere. –

Problemi correlati