C# Conteggio Istanze

sarebbe possibie verificare se una nuova istanza/oggetto è stato creato e magari conteggiarle?
ho fatto alcune ricerche in italiano, ma non sono riuscito a trovare ciò che credo servisse. . .

edit:
ipotesi; se istanza è una lista, debbo verificare se quella lista ha oggetti?
in tal caso può anche essere che un’istanza è stata creata ma non inizializzata,
e che quindi non contenga nulla, in questo caso come verifico se istanza esiste?

ps mi sa che forse dovrei inserire una lista in un file esterno. . .

Salvio, sei tu che devi gestire il tutto.
La lista dovrebbe avere una proprietà count (o giù di li) che indica il numero di
oggetti (da distinguere da capacity o quacosa del genere … che indica l’attuale
capacità di registrare alloccata in memoria … ).

Parli di Rhino ? Quindi di oggetti geometrici ?

O di oggetti C# di classi diverse (non RhinoCommon) ?
In questo caso che classi sono ? Chi le utilizza ?

@Sergio_Alessi si infatti anch’io stavo andando in questa direzione, ma non credo che sia quella che serve per ciò che ho in mente. ovviamente debbo gestire io la cosa, ma vorrei capire quali strumenti ho. . .

@emilio intendo classi in C# (in che senso: chi le utilizza?)

Persona persona1 = new Persona();

vorrei sapere se persona1 è stato creato ed eventualmente nel caso persona2 persona3 ecc ecc

l’unica cosa che per adesso mi è venuta in mente e una variabile numeratore
che conteggia ogni volta che viene richiamata la classe Persona. o c’é altro?

ps vorrei numerare in automatico tipo: persona[1] persona[2] persona[3]
ma mi stanno venendo dubbi sulla fattibilità. . .

Nel senso: e’ tutto codice che scrivi tu ?

Concordo.
Per esempio puoi usare uno static member della classe come contatore e incrementarlo nel costruttore.

Puoi usare un instance member come numero di riferimento per la instance.

Piccolo esempio veloce:

class Pe
{
  public static int cnt = 0;
  public string name;
  public int nu;

  public Pe( string name )
  {
    this.name = name;
    cnt ++;
    this.nu = cnt;
  }
}

class main
{
  static void Main()
  {
    var p1 = new Pe( "Pippo" );
    var p2 = new Pe( "Pluto" );
    var p3 = new Pe( "Paperino" );
    Console.WriteLine( $"{p1.name} => {p1.nu}" );
    Console.WriteLine( $"{p2.name} => {p2.nu}" );
    Console.WriteLine( $"{p3.name} => {p3.nu}" );
    Console.WriteLine( $"Totale oggetti: {Pe.cnt}" );
  }
}

Emilio già è un casino da solo, figuriamoci se mi mettessi a gestire codici di altri :wink:

mi fa piacere (ma. . .)

. . . l’intenzione è numerare la p1 (in automatico)
il numeratore per poi essere richiamato dall’istanza ci ero arrivato
ma quando provo in qualsiasi modo ad automatizzare il nome dell’istanza mi blocca qualsiasi tentativo. . .

Parli del nome della variabile ?
Puoi spiegare come useresti questa possibilita’ ?

Perche’ a prima vista non e’ chiaro …
Dici che il codice lo scrivi tu, ma poi dici che il nome della variabile non lo decidi tu … :thinking:

in automatico nella console
viene generato in automatico il nome dell’istanza,
ed io invece inserisco i dati che ci vogliono per il metodo

ps se non sbaglio, da quello che ho capito, nemmeno se inserisco dalla console io il nome va bene. . .

Mi spiace, non capisco …
Non so nemmeno cosa sia la console … :smile:

Ti risponderanno altri. :slight_smile:

Emilio, intendo il terminale quando si preme F5 in VisualStudio (nel tuo caso mi sembra che usi Mono)

Non preoccuparti, Salvio.
Hai ragione, non conosco VS e non so cosa si possa fare da console/terminale.

Io con Mono uso un text editor per scrivere il programma e il terminale/console di Mono per compilarlo ed eseguirlo.
Per me sono due attivita’ ben distinte e in sequenza:

  1. scrivere il programma, compresi i nomi delle variabili
  2. eseguire il programma, e qui non ho possibilita’ di modificare il codice del programma, e per quanto mi riguarda non avrei motivo di modificarlo, per cui i nomi delle variabili non cambiano.

Forse con VS si possono fare altre cose. :confused:

Speriamo che legga la discussione qualcuno che conosce VS e ti possa rispondere. :slight_smile:

l’intenzione non era di modificare il codice
ma quello di usare in automatico quello scritto

da quello che ho visto non’é fattibile, ma a questo punto mi chiedo:
ok abbiamo compreso (io) cosa sono le classi, i metodi, i costruttori ecc
abbiamo imparato come scriverli e la loro sintassi (anche grazie alla correzione di VS)
quindi se in una classe, scrivo un metodo che può usare vari tipi di costruttri
ma alla fine (tutto questo ambarabà) lo debbo già impostare nel codice, scusa non comprendo il senso.

quando venivano spiegati metodi/costruttori, avevo immaginato che poi venisse gestito il tutto al terminale.

Vediamo se ho afferrato …Vorresti usare C# come un interprete interattivo.
Cioe’ come puoi fare con Python, ad esempio, lanci un terminale, scrivi python e compare il prompt
>>> dove tu puoi scrivere espressioni ed istruzioni Python, che vengono valutate/eseguite subito e il cui valore o risultato viene stampato sotto.

Per fare cio’ VS dovrebbe comprendere anche un interprete interattivo.
Non ho idea se ce l’abbia o no.

E comunque non so se ci siano degli interpreti ‘intelligenti’ in grado di generare i nomi delle variabili.
Sarebbe una specie di interprete interattivo programmabile … sto andando in confusione. :confused: :smile:

D’altra parte nell’ambiente Rhino nemmeno Python lo puoi usare in modo interattivo, se non sbaglio.
Puoi solo scrivere lo script completo e poi eseguirlo.

Be’,certo ognuno ha le sue preferenze.
Ma suppongo che per molti il senso sia di riuscire a scrivere del software, come Rhino ad esempio.
Anche se credo che Rhino sia scritto, in gran parte almeno, in C++.
Ma Grasshopper 2 a quanto so e’ scritto, in gran parte almeno, in C#.

Certamente esistono anche molti programmi interattivi, ma penso che l’interattivita’ sia codificata nel programma. Cioe’ il programma definisce le istruzioni che e’ in grado di eseguire, come fa Rhino con i suoi comandi.
Il linguaggio dei comandi di Rhino non ha niente a che fare con il linguaggio in cui e’ scritto Rhino.
Sono cose separate.
L’interprete dei comandi di Rhino e’ stato scritto da McNeel dentro Rhino, non e’, per cosi’ dire, preso in prestito dal linguaggio di programmazione usato per scrivere Rhino.

Oppure devi usare un interprete interattivo, e cercare un linguaggio di programmazione che ne fornisca uno, come Python ad esempio.
Ma anche qui, non so se esistano interpreti interattivi programmabili … :confused:

non so risponderti ai tanti interrogativi che hai posto, mi ero limitato a cose che pensavo più basilari
con F5 (come credo tanti altri compilatori di codice) si avvia una finestra “console” dove vedi gli output del codice oppure si può interagire con gli input da dargli. di interpreti interattivi programmabili non ne ho idea.

quindi se conteggio una variabile che parte da 0 come contatore, e prima gli aggiungo un nome fisso,
il nome rimane quello “persona” e di fianco viene aggiunto il contatore che si incrementa:
persona1
persona2
ecc
ecc

il programma è impostato a fare ciò ad un certo evento e non bisogna che io interagisca. . .
ma a quanto pare al nome all’oggetto, non permette di essere associato ad una variabile
essendo che è già il nome stesso una variabile (per lo meno così mi sembra di capire)

Ah, OK, parliamo del debugger, non lo avevo capito … sorry.
Purtroppo non ho l’abitudine di usare un debugger, quindi anche qui non saprei cosa dire …
Mi spiace di aver risposto a sproposito … e’ proprio meglio che lasci parlare chi conosce queste cose. :slight_smile:

Ci sara’ qualcuno che conosce VS ! … Spero ! :wink:

figurati, quante volte avevo posto un problema ma non spiegandomi bene, mi sono stati dati consigli che
alla fine comunque si sono ritrovati utili per altre situazioni. quindi l’importante è un dialogo costruttivo.

ps

anche i metodi per interagire è stato messo proprio il nome “Console” Write/Read

con Mono invece crea un file eseguibile ma credo sia la stessa cosa.

E’ vero, non lo avevo notato ! :grinning:

Anche Mono puo’ usare un IDE, cioe’ un ambiente di sviluppo simile a VS, ad esempio vedo che c’e’ MonoDevelop, forse ce ne sono anche altri.
Ma io sono abituato “alla vecchia maniera”, quindi non li uso e non li conosco. :blush:

1 Mi Piace

Salvio stai facendo un po di confusione. Nulla viene fatto come per magia. A differenza dei
primi compilatori, i compilatori moderni in modalità “Debug” inseriscono dei frammenti di codice
per monitorare le variabili dichiarate, consente di “sospendere” temporaneamente l’esecuzione,
monitora l’uso delle risorse ecc. In questo modo l’utente può intercettare velocemente eventuali errori,
ottimizzare il codice ecc… Una volta completato il codice dovrai compilare il programma in modalità
Release ottenendo un file eseguibile che risulterà più “piccolo” e più veloce in termini di esecuzione.
Il nome delle variabili che hai indicato all’interno del codice non esistono nel file .exe in quanto vengono “tradotte” in indirizzi di memoria.

2 Mi Piace

Credo si possa fare creando prima un evento.
Ogni volta che si istanzia la classe aumenta il contatore.

@luca.filippone riporto la stessa parte che ha menzionato Sergio, dove indicavo proprio quello che tu dici
ma se provi ad inserire un qualsiasi “nome” che contenga una parte numerica che si incrementa
in automatico, lo stesso “nome” non viene accettato, e compaiono vari errori di compilazione.

non mi sembra di aver detto o fatto intendere di pensare una cosa simile

è proprio quello che ho ribadito proprio alla prima riga di questa risposta

perfetto, non posso essere che daccordo, ma usando VS non creo un eseguibile
(e per creare un eseguibile, il codice deve essere privo di errori. quindi rimando alla prima riga)

poi che dire, se si può fare, accetto consigli suggerimenti esempi ecc.