Merhaba,
Yabancı forumda da dile getirdiğim gibi çok belirgin olmayan bir protect ve private ikişkisi var. Ama gelen ilk cevaba bakılırsa protected:
- Miras alınan sınıfın üyesine, alt sınıf (onu miras alan) için ekstradan erişim imkanı tanıyormuş.
En azından benim anladığım bu; bir başkası:
- Bütün bu özellikleri, sadece modüller arası çalışırken görebilmemiz. Zaten bu konuyu 3 Ekim 2021 Zoom toplantısında konuşmuştuk. Özellikle package çerçevesinde...
Örneğin bu 3 özelliği şu 2 modülde görebiliyoruz:
module app;
package
{
class Any
{
//protected/*
private//*/
string Data;
this(string data) {
this.Data = data;
}
@property getData() {
return Data;
}
}
}
// package içine girebiliyor...
Any getClass(string d) {
return new Any(d);
}
// private özelliğini deliyor...
string getData(Any test) {
return test.Data;
}
main.d
import app;
void main()
{
enum str = "int";
auto any = str.getClass();
assert(any.getData() == str);
}
Aslında bu programda hata vermemesi dışında hiçbir şey göremiyoruz! Hata vermediği için de sınıfa ve onun içerdiği veriye dolaylı yoldan erişebiliyoruz...
Hoş, bu kod hiçbir işe de yaramıyor :)
Ama getClass() ve getData() işlevleri olmayınca app.d modülüne ve onun içindeki pakete erişmenin hiçbir yolu yok. Yani dış modüllere kapalı bir kutu. Paket içindekilere sınırsız açık tabi.
Son Bir Not: Diyelim ki package içinde korumalı şekilde çalışırken, sınıflardan birini bu izolasyonun dışına almak istediğiniz de 2 seçeneğiniz var:
- Başına public eklemek veya
- Fiziki olarak package dışına (cut&paste almak.
Başarılar...