Klasy są typami odniesienia, a struktury są typami wartości.
Kiedy mówię, że Klasy są typami referencyjnymi,
zasadniczo zawierają adres zmiennych instancji.
Na przykład:
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.
}
W metodzie głównej
mogę utworzyć instancję tej klasy za pomocą nowego operatora, który przydziela pamięć dla tej klasy
i przechowuje jej adres podstawowy w zmiennej typu MyClass (_myClassObject2).
Static Public void Main (string[] arg)
{
MyClass _myClassObject1 = new MyClass();
_myClassObject1.DataMember = 10;
MyClass _myClassObject2 = _myClassObject1;
_myClassObject2.DataMember=20;
}
W powyższym programie MyClass _myClassObject2 = _myClassObject1; instrukcja wskazuje, że obie zmienne typu MyClass
- myClassObject1
- myClassObject2
i wskaże tę samą lokalizację pamięci.
Zasadniczo przypisuje tę samą lokalizację pamięci do innej zmiennej tego samego typu.
Więc jeśli jakiekolwiek zmiany, które wprowadzimy w jednym z obiektów typu MyClass, będą miały wpływ na inny
ponieważ oba wskazują na tę samą lokalizację pamięci.
„_myClassObject1.DataMember = 10;” w tym wierszu oba elementy danych obiektu będą zawierać wartość 10.
„_myClassObject2.DataMember = 20;” w tym wierszu zarówno element danych obiektu będzie miał wartość 20. W
końcu, uzyskujemy dostęp do członków danych obiektu przez wskaźniki.
W przeciwieństwie do klas, struktury są typami wartości. Na przykład:
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;
}
W powyższym programie
utworzenie instancji obiektu typu MyStructure przy użyciu nowego operatora i
zapisanie adresu w zmiennej _myStructObject typu MyStructure i
przypisanie wartości 10 członowi danych struktury za pomocą „_myStructObject1.DataMember = 10”.
W następnym wierszu
deklaruję inną zmienną _myStructObject2 typu MyStructure i przypisuję do niej _myStructObject1.
Tutaj kompilator .NET C # tworzy kolejną kopię obiektu _myStructureObject1 i
przypisuje tę lokalizację pamięci do zmiennej MyStructure _myStructObject2.
Zatem wszelkie zmiany, które wprowadzimy w _myStructObject1, nigdy nie będą miały wpływu na inną zmienną _myStructObject2 typu MyStructrue.
Dlatego mówimy, że struktury są typami wartości.
Zatem bezpośrednią klasą podstawową dla klasy jest Object, a bezpośrednią klasą podstawową dla Structure jest ValueType, który dziedziczy z Object.
Klasy będą wspierać dziedziczenie, podczas gdy struktury nie.
Jak to mówimy?
A jaki jest tego powód?
Odpowiedź brzmi: klasy.
Może być abstrakcyjny, zapieczętowany, statyczny i częściowy i nie może być prywatny, chroniony i chroniony wewnętrznie.