2015-02-11 11 views
9

Sono un novizio di C# e Visual Studio MS e desidero utilizzare la classe C# definita in un altro file, ma non riesco a farlo funzionare.Come utilizzare la classe da altri file in C# con Visual Studio?

Ecco l'program.cs (e perché non posso cambiare titolo quel file?)

using System; 

namespace TestCSharp2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Class2 class2 = new Class2(); 
      // here the IDE will complain that cant find namespace or balabala.. 
      class2.setValue(10); 
      Console.WriteLine(class2.getValue().ToString()); 
      Console.ReadKey(); 
     } 
    } 
} 

E qui è la Class2 che voglio usare nel file di Class2.cs:

namespace TestCSharp2 
{ 
    class Class2 
    { 
     int i; 
     public void setValue(int i) 
     { 
      this.i = i; 
     } 
     public int getValue() 
     { 
      return this.i; 
     } 
    } 
} 

Dovrei #include o qualcosa del genere? non è sufficiente use namespace?

enter image description here


Come alcuni ragazzi hanno chiesto se sono nello stesso assembly/stesso progetto, ho presumo lo fossero, perché qui è la procedura di come vengono creati:

  • Un nuovo progetto che utilizza il modello di Progetto console C#, quindi lo program.cs è stato creato per impostazione predefinita.
  • Class2.cs è stato creato con [File] -> [Nuovo] -> [File] -> [Classe C#] e salvato nella stessa cartella in cui vive program.cs.

Per essere onesti, non so se sono in stesso assembly/stesso progetto, ma immagino che erano.

+0

Entrambi vivono nello stesso assemblaggio? Preferisci anche usare le proprietà sui metodi get/set. C# non è java :) –

+0

sono nello stesso progetto? cosicché quando vengono compilati finiscono nello stesso binario? Se sono in progetti separati, è necessario fare riferimento al primo progetto al secondo. – cjb110

+0

Grazie per il tuo consiglio su getter/setter, ma non so cosa intendi per * lo stesso assembly *. – armnotstrong

risposta

8

Secondo la tua spiegazione non hai incluso il tuo Class2.cs nel tuo progetto. Hai appena creato il file di classe richiesto ma non lo hai incluso nel progetto.

Class2.cs è stato creato con [File] -> [Nuovo] -> [File] -> [Classe C#] e salvato nella stessa cartella in cui si trova program.cs.

fare quanto segue per superare questo,

Basta Right click sul vostro progetto quindi -> [Aggiungi] -> [Elemento esistente ...]: Selezionare Class2.cs e premere OK

problema dovrebbe essere risolto ora.

Inoltre, quando si aggiungono nuove classi utilizzare questa procedura,

Right click al progetto -> [Aggiungi] -> Scegliete il termine Prodotto (ex - Una classe, forma etc.)

+0

Grazie per l'aiuto, ma c'è un modo migliore per creare un file che per impostazione predefinita appartiene allo stesso progetto, fare riferimento ad esso ogni volta che creo un file non è un buon modo, penso. – armnotstrong

+0

Parte più della mia risposta fornisce quell'informazione :) .. Cordiali saluti –

+1

Grazie ancora, penso che sia il navigatore di progetto a destra piuttosto che a sinistra che differisce dagli ex IDE che ho usato per quello che ho dovuto trascurare :-) – armnotstrong

1

Secondo il tuo esempio qui sembra che entrambi risiedano nello stesso spazio dei nomi, concludo che sono entrambi parte dello stesso progetto (se non hai creato un altro progetto con lo stesso namespace) e tutte le classi di i default sono definiti come interni al progetto in cui sono definiti, se non sono stati dichiarati altrimenti, quindi il problema è che il tuo file non è incluso nel tuo progetto. È possibile includerlo facendo clic con il pulsante destro del mouse sul file solution explorer window => Includi nel progetto, se non è possibile visualizzare il file all'interno dei file di progetto in solution explorer, quindi fare clic su mostra il pulsante del menu superiore di solution explorer chiamato show all files (basta hove il cursore del mouse sopra il pulsante lì e vedrete i nomi dei pulsanti)

solo per le conoscenze di base: Se il file risiede in un diverso progetto di \ assembly allora deve essere definito, altrimenti deve essere definito almeno come interno o pubblico. nel caso in cui la classe stia ereditando da quella classe che può essere protetta.

4

Sarebbe più utile per noi se potessimo vedere la struttura del progetto , poiché le classi da sole non dicono molto.

Supponendo che entrambi i file .cs si trovino nello stesso progetto (se si trovano in progetti diversi all'interno della stessa soluzione, è necessario aggiungere un riferimento al progetto contenente Class2.cs), è possibile fare clic sull'evento Class2 nel codice sottolineato in rosso e premere CTRL + . (punto) o fare clic sulla barra blu che dovrebbe essere lì. La prima opzione che appare aggiungerà automaticamente l'appropriata istruzione using. Se non esiste un tale menu, potrebbe indicare che c'è qualcosa di sbagliato nella struttura del progetto o un riferimento mancante.

Si potrebbe provare a fare Class2public, ma suona come questo non può essere un problema qui, dal momento che per default quello che hai fatto è internal class Class2 e quindi Class2 dovrebbe essere accessibile se entrambi vivono nello stesso progetto/montaggio. Se si fa riferimento a un diverso assieme o progetto in cui è presente , è necessario impostarlo su public per accedervi, poiché le classi internal non sono accessibili dall'esterno del proprio assieme.

Come per la ridenominazione: è possibile fare clic su Program.cs in Esplora soluzioni e premere F2 per rinominarlo. Si aprirà quindi una finestra di dialogo che ti chiederà se la classe Program stessa e tutti i suoi riferimenti dovrebbero essere rinominati, che di solito è ciò che desideri. Oppure puoi semplicemente rinominare la classe Program nella dichiarazione e aprire nuovamente il menu con la piccola barra blu (o, ancora, CTRL + .) e fare lo stesso, ma non automaticamente rinominerà l'attuale file di conseguenza.

Modifica dopo la vostra domanda di modifica: Non ho mai usato questa opzione si è utilizzato, ma dal controllo rapido penso che non è proprio all'interno dello stesso progetto, allora. Effettuare le seguenti operazioni quando si aggiungono nuove classi a un progetto: In Esplora soluzioni, fare clic con il tasto destro del mouse sul progetto creato e selezionare [Aggiungi] -> [Classe] o [Aggiungi] -> [Nuovo elemento ...] e quindi selezionare 'Classe '. Questo renderà automaticamente la nuova classe parte del progetto e quindi l'assemblea (l'assemblaggio è fondamentalmente il 'prodotto finale' dopo la costruzione del progetto). Per me, c'è anche la scorciatoia Alt + Shift + C che lavora per creare una nuova classe.

+0

Come posso aggiungere la bella grafica 'pulsante' per le scorciatoie da tastiera? Mi dimentico sempre ... – InvisiblePanda

+0

Puoi trovarlo nella mia modifica :-D –

+0

@SriramSakthivel Grazie mille, devo scrivere questo giù da qualche parte ... :) – InvisiblePanda

1

Sì, ho appena fatto lo stesso errore "noob" e ho trovato questo thread. In effetti avevo aggiunto la classe alla soluzione e non al progetto. Così si presentava così:

Wrong and right

enter image description here

semplicemente aggiungendo questo nella speranza di essere di aiuto a qualcuno.

0
namespace TestCSharp2 
{ 
    **public** class Class2 
    { 
     int i; 
     public void setValue(int i) 
     { 
      this.i = i; 
     } 
     public int getValue() 
     { 
     return this.i; 
     } 
    } 
} 

Aggiungere la dichiarazione "Pubblica" prima di "Classe Classe2".

Problemi correlati