Animal isminde bir sınıfımız olsun. Birde Cat isminde Animal sınıfını extends etmiş sınıfımız daha var. Şimdi normalde 1. kullanımı biliyorum ve kullanıyorum.Ancak kod incelerken 2. kullanımada rastladım. Ve 3. kullanımı da garbage collector konusuna çalışırken rastladım.

Kısaca 2. ve 3. kullanımların anlamlarını açıklayabilir misiniz?

1) Animal a = new Animal();

2) Animal b = new Cat();

3) new Personel("ahmet",123);

soruldu: 08 Eki '14, 09:37

ugurcanlacin's gravatar image

ugurcanlacin
816101625
cevap kabul oranı: 11%

değiştirildi: 08 Eki '14, 10:14


2) Bu kullanımda tanımladığın b nesnesi Animal sınıfının özelliklerine sahip olur ancak Cat sınıfının constructure ini kullanır. Karşılaşılacak sorun ise Cat sınıfı içerisinde var olan attribute ve metotların Animal sınıfından miras alınmayanları kaybolacaktır. Örnek: MSDN Link

public class BaseC
{
public int x;
public void Invoke() { }
}
public class DerivedC : BaseC
{
    new public void Invoke() { }
}

public class BaseC
{
    public static int x = 55;
    public static int y = 22;
}

public class DerivedC : BaseC
{
    // Hide field 'x'. 
    new public static int x = 100;

    static void Main()
{
    // Display the new value of x:
    Console.WriteLine(x);

    // Display the hidden value of x:
    Console.WriteLine(BaseC.x);

    // Display the unhidden member y:
    Console.WriteLine(y);
}
}
/*
Output:
100
55
22
*/

3) Bu tanımlamanın garbage collectorla bir ilgisi yok. Varsa da ben bilmiyorum. Ama bu kullanımın temel amacı default constructure i değil kendi yazdığın ve nesneyi initliaze edecek yani senin verdiğin değerlerle yaratacak constructure i çağırıyor olmasıdır.

Örnek: Link

struct A {
int n;
A(int n=1) : n(n) {}
A(const A& a) : n(a.n) {} // user-defined copy ctor
};

struct B : A {
// implicit default ctor B::B()
// implicit copy ctor B::B(const B&) 
};

struct C : B {
     C() : B() {}
 private:
     C(const C&); // non-copiable, C++98 style
};

int main()
{
    A a1(7);
    A a2(a1); // calls the copy ctor
    B b;
    B b2 = b;
    A a3 = b; // conversion to A& and copy ctor
    volatile A va(10);
    // A a4 = va; // compile error

    C c;
    // C c2 = c; // compile error
}
permanent link

cevaplandı: 08 Eki '14, 10:10

osmanraifgunes's gravatar image

osmanraifgunes
2.4k81736
cevap kabul oranı: 31%

2) Kullanımda her kedi bir hayvan olduğundan onu referansını bir hayvan olarak tutabilirsiniz. Aslında bu daha çok aynı atadan gelen nesnelerin atasının özelliklerini kullanabilmek için kullanılır ancak bu nesnenin kendi özelliklerini kaybettiği anlamına gelmez. Daha sonra nesneyi kendi türüne cast ederseniz tekrardan bu nesnenin kaybolan özelliklerini kullanabilirsiniz.

3) Anlamı şu. Garbage collector, kullanılmayan nesneleri bulmaz. Kullanılan nesneleri bulur, daha sonra geri kalan bütün nesneleri siler. Bu şu demek olur. Thread kökünden başlayarak bağlı bütün nesneleri kontrol eder, dallanan ağaçta bütün çocukları gezer daha sonra gezilemeyen bütün nesneleri siler. Bu demek olur ki bağlı olmayan nesne silenecektir. Bu nedenle yukarıda bir referansa bağlamadan oluşturduğunuz nesne GC'nin ilk çalışmasında silenecektir.

permanent link

cevaplandı: 09 Eki '14, 02:28

molgun's gravatar image

molgun
1.3k1921
cevap kabul oranı: 23%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,076
×6
×2
×1

Soruldu: 08 Eki '14, 09:37

Görüntüleme: 702 kez

Son güncelleme: 09 Eki '14, 02:28

powered by BitNami OSQA