Thread overview
December 11, 2013
class A{
string b;
this(string b){
 this.b = b;
}
}

class B : A{
 this(A a){
    //super = a;
 }
}

void main(){
  auto x = new A("test");

  auto y = new B(x);
}

İstediğim şey böyle bir şey :) Şimdi ayrı ayrı d dosyalarında sınıflarım var ve ana sınıfımdan diğer sınıfları new ile oluşturuyor/çağırıyorum. Ana sınıfımda veritabanı bilgileri gibi çeşitli bilgiler var ve diğer bütün sınıflar bu ana sınıfı kalıtım yoluyla alıyor. Diğer sınıfların içerisinde tekrardan super ile çağırmak istemiyorum zaten hali hazırda kendisini çağıran o sınıfı super sınıf olarak kabul etmesini istiyorum.

Böyle bir olanak var mı D dilinde? Eğer anlatamadıysam söyleyin biraz daha açmaya çalışayım :)

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 11, 2013

Hocam bu kullanım da çok işimi görür :-D teşekkür ederim.

Şu an mobilim test edemiyorum ama şu çoklu Alias olayını anlamadım ve Alias yaptıktan sonra o sınıfın normal üyelerine erişebiliyor muyuz?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 11, 2013

Nesne kurulurken üst sınıf parçası da aynı anda kurulur. Üst sınıf parçasının toptan atanması normalde mümkün değil. Bunun bir nedeni, sınıflarda opAssign'ın yüklenemiyor olması. Belki std.algorithm'da "şu sınıf nesnesini şu nesne ile değiştir" diye genel bir işlev vardır ama ben bilmiyorum.

Buna rağmen, sorduğun kadarının çözümü, alias this:

import std.stdio;

class A{
   string b;
   this(string b){
       this.b = b;
   }
   void foo()
   {
       writeln(b);
   }
}

class B {
   A a;

   alias a this;

   this(A a){
       this.a = a;
   }
}

void main(){
   auto x = new A("test");

   auto y = new B(x);

   // B de A gibi kullanılabiliyor:
   y.foo();    // "test" yazar
}

Ne yazık ki alias this'in hâlâ giderilmemiş olan bir sorunu var: Bir sınıfta veya yapıda ancak tek alias this olabiliyor. (Bu, yalnızca bir gerçekleştirme sorunu; birisi ele aldığında düzelecek.)

Ve tabii ki gerçek kalıtım değil.

mixin'e kadar gitmeyi gerektirmeyen başka çözümler de düşünülebilir herhalde. Doğrusu, bu istediğini bu güne kadar pek duymadım. Demek ki başka çözümleri olmalı. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 11, 2013

Alıntı (zekeriyadurmus):

>

Hocam bu kullanım da çok işimi görür

Her durumda göremeyebilir çünkü B A'dan türetilmediği zaman onun sanal işlevini kendisi tekrar belirleyemez. (Onun da yolu olmalı ama 'alias this' tam kalıtım değil; daha çok "onun yerine kullanıldığımda bu üyemden yararlan" demek.)

Alıntı:

>

çoklu Alias olayını anlamadım

'alias this' çok basit bir olanak:

http://ddili.org/ders/d/alias_this.html

Oradan alıntı;

Alıntı:

>

Not: Bu bölümü yazdığım sırada kullandığım dmd'nin 2.062 sürümü bu konuda henüz yetersiz; yalnızca tek alias this bildirimine izin veriyor.

Not: 2.064 de öyle. :)

Alıntı:

>

ve Alias yaptıktan sonra o sınıfın normal üyelerine erişebiliyor muyuz?

Evet, sınıf hâlâ B ama A gibi kullanılması gereken yerde, 'alias this' ile belirtilmiş olan üyesi kullanılıyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]