Le classi sono tipi di riferimento e le strutture sono tipi di valori.
Quando dico che le classi sono tipi di riferimento,
fondamentalmente conterranno l'indirizzo di una variabile di istanza.
Per esempio:
Class MyClass
{
Public Int DataMember; //By default, accessibility of class data members
//will be private. So I am making it as Public which
//can be accessed outside of the class.
}
Nel metodo principale,
posso creare un'istanza di questa classe utilizzando un nuovo operatore che alloca memoria per questa classe
e memorizza l'indirizzo di base di tale nella variabile di tipo MyClass (_myClassObject2).
Static Public void Main (string[] arg)
{
MyClass _myClassObject1 = new MyClass();
_myClassObject1.DataMember = 10;
MyClass _myClassObject2 = _myClassObject1;
_myClassObject2.DataMember=20;
}
Nel programma sopra, MyClass _myClassObject2 = _myClassObject1; l'istruzione indica che entrambe le variabili di tipo MyClass
- myClassObject1
- myClassObject2
e indicherà la stessa posizione di memoria.
In pratica assegna la stessa posizione di memoria in un'altra variabile dello stesso tipo.
Pertanto, se qualsiasi modifica apportata a uno qualsiasi degli oggetti, digitare MyClass avrà un effetto su un altro
poiché entrambi puntano alla stessa posizione di memoria.
"_myClassObject1.DataMember = 10;" su questa riga entrambi i membri dei dati dell'oggetto conterranno il valore di 10.
"_myClassObject2.DataMember = 20;" su questa riga entrambi i membri dei dati dell'oggetto conterranno il valore di 20.
Alla fine, accediamo ai membri di un oggetto tramite puntatori.
A differenza delle classi, le strutture sono tipi di valore. Per esempio:
Structure MyStructure
{
Public Int DataMember; //By default, accessibility of Structure data
//members will be private. So I am making it as
//Public which can be accessed out side of the structure.
}
Static Public void Main (string[] arg)
{
MyStructure _myStructObject1 = new MyStructure();
_myStructObject1.DataMember = 10;
MyStructure _myStructObject2 = _myStructObject1;
_myStructObject2.DataMember = 20;
}
Nel programma precedente,
creare un'istanza dell'oggetto di tipo MyStructure usando un nuovo operatore e
memorizzare l'indirizzo nella variabile _myStructObject di tipo MyStructure e
assegnare il valore 10 al membro dati della struttura utilizzando "_myStructObject1.DataMember = 10".
Nella riga successiva,
sto dichiarando un'altra variabile _myStructObject2 di tipo MyStructure e assegnando _myStructObject1.
Qui il compilatore .NET C # crea un'altra copia dell'oggetto _myStructureObject1 e
assegna tale posizione di memoria nella variabile MyStructure _myStructObject2.
Pertanto, qualsiasi modifica apportata a _myStructObject1 non avrà mai effetto su un'altra variabile _myStructObject2 di tipo MyStructrue.
Ecco perché stiamo dicendo che le strutture sono tipi di valore.
Quindi la classe Base immediata per la classe è Object e la classe Base immediata per Structure è ValueType che eredita da Object.
Le classi sosterranno un'eredità mentre le strutture no.
Come lo stiamo dicendo?
E qual è la ragione dietro questo?
La risposta è Classi.
Può essere astratto, sigillato, statico e parziale e non può essere interno privato, protetto e protetto.