posso esporre una classe da un altro spazio dei nomi .net come classe nel mio spazio dei nomi?

StackOverflow https://stackoverflow.com/questions/138638

  •  02-07-2019
  •  | 
  •  

Domanda

Posso esporre una classe da un altro spazio dei nomi .net come classe nel mio spazio dei nomi? Uso una classe - antlr.collections.AST - come tipo di ritorno per una funzione appartenente a una classe nel mio spazio dei nomi; di conseguenza, l'utente deve avere

using antlr.collections;
using myNamespace;

nella parte superiore dei loro file per utilizzare la mia funzione. Posso rendere myNamespace.AST un alias per antlr.collections.AST, in modo tale che l'utente debba solo

using myNamespace;

nella parte superiore dei loro file?

È stato utile?

Soluzione

Tieni presente che i consumatori del tuo codice in realtà non devono avere istruzioni sull'utilizzo. Quelli sono lì per rendere le loro vite più facili, quindi non devono digitare antlr.collections.Foo e antlr.collections.Bar su tutta la loro fonte.

Il più grande "impatto" (se davvero ce n'è davvero uno grave) è che il consumatore del tuo codice avrà bisogno di un duro riferimento all'assembly in cui è definito antlr.collections.

Tuttavia, se è documentato in anticipo, onestamente non vedo che sia un grosso problema. Non è diverso dal consumatore di un DAL generato da SubSonic che necessita di riferimenti sia all'assemblaggio DAL generato che all'assemblaggio SubSonic originale. (E, molto probabilmente, anche usando le dichiarazioni.)

Le dipendenze sono ciò che sono. C'è una ragione per cui le classi sono suddivise in spazi dei nomi, principalmente per l'organizzazione e per ridurre i conflitti di denominazione. Non sapendo quali sono le classi nello spazio dei nomi che menzioni, non so quanto sia probabile un simile conflitto nel tuo scenario ... Ma tentare di spostare la classe da uno spazio dei nomi a un altro, o nascondere il fatto che tale è necessario derivandone una classe vuota, probabilmente non è la migliore idea. Non ucciderà i consumatori della tua classe per avere un altro riferimento e usare la dichiarazione.

Altri suggerimenti

Che ne dici di derivare una classe usando lo stesso nome nel nuovo spazio dei nomi? Intendevo:

namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}

crea una nuova classe che eredita la classe nel tuo nuovo spazio dei nomi. Non è l'ideale, ma è utile per test unitari e simili.

Dovresti pensare al perché lo stai facendo, tuttavia le classi sono suddivise in spazi dei nomi per un motivo.

No, non puoi.

Il percorso completo e il nome di una classe fanno parte della sua identità.

Se provieni dalla classe e restituisci la classe derivata, ti assumerai la responsabilità di fornire tutta la documentazione per il tipo restituito.

Penso che farai un disservizio agli sviluppatori che usano la tua biblioteca perché non necessariamente sapranno che ciò con cui stanno realmente lavorando è un tipo da antir.collections (non che io sappia nemmeno cosa sia, ma non è questo il punto). Se lo sviluppatore arriva su StackOverflow.com alla ricerca di informazioni su quel tipo di ritorno, è più probabile che trovino informazioni se il tipo proviene da un "comune" libreria o dalla tua?

L'unica soluzione è nascondere l'intera dipendenza al tipo antlr.collections.AST.

Puoi utilizzare un Adapter per questo scopo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top