2010-10-04 16 views
126

È possibile avere due parti (stesso spazio dei nomi, stesso nome di classe) in una classe parziale in DLL separate?Classi parziali in DLL separate

+0

come gli altri hanno detto che non è possibile, ma ci sono modi per integrare le classi con un nuovo comportamento da diverse fonti, cosa esattamente vuoi fare in dll differenti? – Ozan

+0

Nel mio caso, voglio aggiungere un paio di metodi statici a una classe che è definita in una libreria di terze parti. I metodi di estensione non funzionano e nemmeno le interfacce e l'ereditarietà, perché la classe è statica. Dopo aver scoperto che è possibile avere classi statiche parziali, sono venuto qui per scoprire se funziona su assiemi, ma purtroppo sembra che anche questo non funzioni. – Ben

risposta

191

Da MSDN -Partial Classes and Methods:

Tutte le definizioni parziale di tipo destinate a siano parti dello stesso tipo deve essere definito nello stesso montaggio e lo stesso modulo (exe o dll). Le definizioni parziali non possono comprendere più moduli .

10

No, non è possibile. Quando l'assemblaggio è compilato, la classe deve essere completata.

30

No. Le classi parziali sono una funzione puramente linguistica. Quando un assembly viene compilato, i file vengono combinati per creare il tipo. Non è possibile distribuire i file in gruppi diversi.

A seconda di ciò che si vuole fare, tuttavia, è possibile utilizzare extension methods per ottenere ciò che è necessario.

3

La domanda è: perché vorresti fare una lezione parziale in un'altra assemblea? È possibile definire classi e interfacce astratte tra assiemi, forse è necessario esaminarlo.

+5

IMHO esistono casi validi, ad esempio: è possibile aggiungere annotazioni modulo MVC a una classe modello definita in un diverso assieme. L'assembly stesso non sa in quale contesto è utilizzato, quindi la classe nell'assembly non dovrebbe avere alcuna annotazione. Potrebbero essere aggiunti in una classe parziale nel contesto MVC (se fosse possibile). – nyi

+3

nyi, perché non ereditare solo da quella classe e dichiarare i tuoi attributi in cima? Puoi anche chiamarlo con lo stesso nome, se preferisci. – Gleno

4

È possibile utilizzare i metodi di estensione quando si desidera aggiungere un metodo a una classe in una dll diversa. L'unico inconveniente di questo metodo è che non puoi aggiungere metodi statici.

1

Mentre altre risposte forniscono lo spiacevole "No" che nessuno che si trova in questa pagina non volesse vedere o sentire, sono rimasto colpito da un altro pensiero che non è stato ancora menzionato qui. Se le classi parziali fossero permesse attraverso gli assembly, si otterrebbe l'accesso ai membri privati ​​a tipi esistenti che non erano stati scritti da lui, e gli permetteva di manipolarli in modi non intenzionali dall'autore originale, mettendo così a repentaglio anche tutte le classi ereditanti.

Non solo, quelle classi negli altri gruppi (e nei loro figli) dovrebbero essere ricompilate per farlo funzionare. Pertanto non è logicamente possibile consentire la divisione di una classe su gruppi diversi.

Problemi correlati