C# Flashcards
Qual è la differenza tra una struttura (struct) e una classe in C#?
Le classi e le strutture in C# contengono dati e metodi.
Le strutture sono tipi di valore e sono utilizzate per rappresentare dati semplici mentre le classi sono utilizzate per rappresentare oggetti complessi e vengono passate per riferimento.
Dentro le classi:
- I costruttori sono metodi che vengono eseguiti quando un oggetto viene inizializzato.
- Gli accessori (getter) e i mutatori (setter) consentono di leggere e modificare i dati all’interno di una classe o struttura.
Cos’è l’upcasting?
L’upcasting consente di trattare un oggetto derivato come se fosse un’istanza della classe base.
static void Main(string[] args) { // Creazione di un'istanza di Car Car myCar = new Car(); // Upcasting dell'istanza di Car a Vehicle Vehicle myVehicle = myCar; // Ora possiamo chiamare i metodi di Vehicle sull'istanza di Car upcasted myVehicle.Move(); // Chiamerà il metodo Move() di Vehicle // myVehicle.Accelerate(); // Questa riga genererà un errore in quanto il tipo Vehicle non ha il metodo Accelerate() Console.ReadLine(); }
In questo esempio, myCar è un’istanza della classe Car. Viene poi effettuato l’upcasting di myCar al tipo Vehicle, consentendo l’accesso solo ai membri di Vehicle. Anche se myVehicle è un’istanza di Car, poiché è stata upcasted a Vehicle, non possiamo più accedere ai membri specifici di Car su di esso, come il metodo Accelerate().
Come si gestiscono gli errori?
- Le eccezioni sono utilizzate per gestire gli errori in modo che non interrompano bruscamente il flusso del programma.
- L’utilizzo di try-catch è un modo di gestire le eccezioni in maniera orientata agli oggetti.
- L’approccio tradizionale include l’uso di istruzioni if e cicli for per gestire gli errori.
Cosa significa la parola chiave “sealed” in C#?
La parola chiave “sealed” viene utilizzata per impedire che una classe venga ereditata da altre classi. Quando una classe viene dichiarata come “sealed”, non può essere utilizzata come classe base per altre classi.
Cosa sono gli indici out-of-range e come possono essere gestiti in C#?
Gli indici out-of-range si verificano quando si tenta di accedere a un elemento di una raccolta usando un indice che non esiste. In C#, questo può causare un’eccezione di tipo “IndexOutOfRangeException”. Per gestire questo tipo di situazioni, è possibile utilizzare controlli di lunghezza prima di accedere agli elementi della raccolta o catturare e gestire l’eccezione.
Qual è la differenza tra “ref” e “out” nei parametri dei metodi in C#?
La parola chiave “ref” viene utilizzata per passare un parametro per riferimento, consentendo al metodo di modificare il valore della variabile passata. La parola chiave “out” viene utilizzata per passare un parametro per riferimento e richiede che il metodo inizializzi la variabile prima di restituirla.
Come si può gestire l’accesso ai dati?
- Il Data Access Layer (DAL) è un componente architetturale che separa la logica di accesso ai dati dalla logica di business.
- Il DAL fornisce un’interfaccia per interagire con le sorgenti di dati come database, file o servizi web.
- Framework come Entity Framework semplificano l’accesso ai dati attraverso il mapping oggetto-relazionale.
In particolare per quanto riguarda la connesione:
- Utilizzando il namespace System.Data.SqlClient
, è possibile gestire le connessioni al database SQL Server in C#.
- È necessario stabilire una connessione, eseguire comandi SQL e leggere i risultati utilizzando SqlDataReader.
- Il Data Access Layer (DAL) separa la logica di accesso ai dati dalla logica di business, migliorando la modularità e la manutenibilità dell’applicazione.
Quali sono i Modificatori di Accesso?
-
public
: Visibile ovunque.-
private
: Accessibile solo all’interno della classe stessa. -
protected
: Accessibile dalle classi figlie. -
internal
: Accessibile all’interno dell’assembly corrente. -
protected internal
: Accessibile all’interno dell’assembly corrente o dalle classi figlie anche in assembly esterni. -
private protected
: Accessibile solo all’interno dell’assembly corrente o dalle classi figlie nello stesso assembly.
-Static
Il modificatore static in C# viene utilizzato per dichiarare membri di una classe che appartengono alla classe stessa anziché a istanze specifiche della classe.
I membri statici sono condivisi tra tutte le istanze della classe e possono essere acceduti utilizzando il nome della classe anziché un’istanza specifica della classe.
I membri statici non possono accedere ai membri non statici della classe e possono essere utilizzati per definire costanti, metodi di utilità o variabili condivise tra tutte le istanze della classe.
-
Quali sono le differenze tra c# e VB.NET?
- VB.NET è il successore di Visual Basic 6 e implementa il .NET Framework, mentre C# è case sensitive e non lo è. VB.NET include la funzionalità di shadow che consente di implementare un membro di classe di base senza sovrascrivere il membro, mentre in C# si ha il concetto di hiding.
- Ci sono differenze sintattiche tra i due linguaggi. Ad esempio, per dichiarare una variabile si usano “declarators” in C# e “Private, Public, Friend, Protected, Static, Shared, Dim” in VB.NET. Per creare un nuovo oggetto, si usa “New” in C# e “New, CreateObject()” in VB.NET. Per riferirsi all’oggetto corrente, si usa “this” in C# e “Me” in VB.NET. Per dichiarare una classe, si usa “Class” in C# e “Class” in VB.NET.
- C# fa parte della famiglia di linguaggi C, mentre VB.NET no.
- In C# non ci sono gli eventi e la gestione degli eventi è più complessa rispetto a VB.NET, dove gli eventi sono collegati automaticamente.
- C’è meno bisogno di casting in C# rispetto a VB.NET.
In conclusione, se si è principianti e si preferisce una struttura e una sintassi più semplice, VB.NET potrebbe essere la scelta migliore. Tuttavia, se si cerca una soluzione moderna con funzionalità aggiornate e buone opportunità di lavoro, C# potrebbe essere preferibile.
Parlami di .NET
In sintesi, il framework .NET è una piattaforma di sviluppo software fondamentale per la creazione di applicazioni. Alcuni punti chiave includono:
- Il Common Language Runtime (CLR) è il cuore del framework .NET, che esegue il codice in un ambiente gestito.
- IL (Intermediate Language) è il linguaggio intermedio in cui viene compilato il codice C# prima di essere eseguito dal CLR.
- Il ciclo di compilazione comprende la traduzione da C# a IL, l’esecuzione da parte del CLR e la conversione in codice nativo per la macchina.
- Il framework .NET è stato introdotto nel 2000 come strumento fondamentale per lo sviluppo di applicazioni.
- .NET Core, introdotto nel 2016, è una versione più leggera del framework .NET che si posiziona un livello sotto il CLR standard, chiamato Core CLR, concentrando l’attenzione sulle funzionalità più recenti e modificando il livello di astrazione.
- Anche se .NET Core è più recente, supporta ancora molte delle applicazioni che utilizzano il framework .NET standard. Tuttavia, con l’avvento di .NET 5, il termine “framework” è stato eliminato dal nome.
- .NET Standard era una specifica che forniva una sorta di ponte tra .NET Framework e .NET Core, consentendo di utilizzare librerie su entrambe le piattaforme. Tuttavia, non è più necessario poiché .NET Core ha sostituito .NET Standard.
- Quindi, per riassumere, abbiamo il .NET Framework che rappresenta uno strato di astrazione che traduce il codice in linguaggio intermedio, .NET Core/.NET che è un livello di astrazione più basso e .NET Standard che era un ponte tra le due piattaforme ma non è più necessario.
Cos’è C#?
C# è un linguaggio orientato agli oggetti, sicuro dal punto di vista dei tipi e gestito che viene compilato dal framework .Net per generare il Microsoft Intermediate Language.
Cos’è un Array Jagged?
Un Array Jagged è un array che contiene elementi di tipo array. Gli elementi possono essere di dimensioni e dimensioni diverse. Possiamo anche chiamare un Array Jagged un Array di array.
A cosa serve “using”?
Il blocco ‘using’ viene utilizzato per ottenere una risorsa, elaborarla e quindi eliminarla automaticamente quando l’esecuzione del blocco è completata.
Qual è lo scopo dell’operatore “this” in C#?
L’operatore “this” viene utilizzato all’interno di una classe per riferirsi all’oggetto corrente o all’istanza della classe. Viene utilizzato per distinguere tra gli attributi/metodi della classe corrente e quelli passati come parametri o definiti in altre classi.
Cos’è la serializzazione?
La serializzazione è il processo di conversione di un oggetto in un flusso di byte per il trasporto attraverso una rete. Perché un oggetto sia serializzabile, deve implementare l’interfaccia ISerialize. La deserializzazione è il processo inverso di creazione di un oggetto da un flusso di byte.