Sınıflar Referans türleridir ve Yapılar Değer türleridir.
Sınıfların referans türleri olduğunu söylediğimde,
temelde bir örnek değişkenlerinin adresini içereceklerdir.
Örneğin:
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.
}
Ana yöntemde,
bu sınıf için bellek ayıran
ve bunun temel adresini MyClass türü değişkenine (_myClassObject2) depolayan yeni işleç kullanarak bu sınıfın bir örneğini oluşturabilirim .
Static Public void Main (string[] arg)
{
MyClass _myClassObject1 = new MyClass();
_myClassObject1.DataMember = 10;
MyClass _myClassObject2 = _myClassObject1;
_myClassObject2.DataMember=20;
}
Yukarıdaki programda, MyClass _myClassObject2 = _myClassObject1; komutu MyClass türünün her iki değişkeninin de
- myClassObject1
- myClassObject2
ve aynı bellek konumunu gösterecektir.
Temel olarak aynı bellek konumunu aynı türdeki başka bir değişkene atar.
Bu nedenle, her
ikisi de aynı bellek konumuna işaret ettiğinden, MyClass türündeki nesnelerden herhangi birinde yaptığımız herhangi bir değişiklik başka bir etki üzerinde etkili olacaktır .
"_myClassObject1.DataMember = 10;" bu satırda nesnenin veri üyeleri 10 değerini içerir.
"_myClassObject2.DataMember = 20;" bu satırda hem nesnenin veri üyesi 20 değerini içerir.
Sonunda, bir nesnenin veri üyelerine işaretçilerle erişiyoruz.
Sınıfların aksine, yapılar değer tipleridir. Örneğin:
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;
}
Yukarıdaki programda,
MyStructure türünün nesnesini yeni operatör kullanarak örneklemek ve
adresi MyStructure türündeki _myStructObject değişkenine depolamak ve
"_myStructObject1.DataMember = 10" kullanarak yapının veri üyesine 10 değeri atamak.
Sonraki satırda,
MyStructure türünde başka bir değişken _myStructObject2 bildiriyorum ve buna _myStructObject1 ataıyorum.
Burada .NET C # derleyicisi _myStructureObject1 nesnesinin başka bir kopyasını oluşturur ve
bu bellek konumunu _myStructObject2 MyStructure değişkenine atar.
Yani _myStructObject1 üzerinde yaptığımız herhangi bir değişiklik, MyStructrue türündeki başka bir _myStructObject2 değişkeni üzerinde asla bir etkiye sahip olmayacaktır.
Bu yüzden Yapıların değer türleri olduğunu söylüyoruz.
Sınıf için derhal Base sınıfı Object ve Object için derhal Base sınıfı, Object'ten devralınan ValueType'tır.
Sınıflar Kalıtım'ı desteklerken Yapılar desteklemez.
Bunu nasıl söylüyoruz?
Bunun arkasındaki sebep nedir?
Cevap Sınıflar.
Soyut, mühürlü, statik ve kısmi olabilir ve Özel, Korumalı ve korumalı dahili olamaz.