Kütüphanelerinizi paket olarak yayınlayıp nuget paket yöneticisine yüklediğinizde internal ve private protected çok sık kullanılıyor (ihtiyaç duyuluyor).
Protected internal biraz kafamı karıştırmıştı, benim anladığım kadarıyla; 1) Internal diyerek methoda aynı kütüphanede izin veriyoruz diğer kütüphanelerde bir instance oluştursak da kullanamıyoruz. 2) Protected diyerek alt classlara methodu kullandırtabiliyoruz. 3) Protected internal yaparsak başka kütüphanede olan bir alt classa o methodu kullanabilme yetkisi veriyoruz ve aynı kütüphane içinde yine kullanabiliyoruz.
Güzel bir video olmuş hocam, bilgileri tazelemek amaçlı eğitim serilerinizi izliyorum. Bilgilerinizden istifade etmeye çalışıyorum, iyi çalışmalar kolay gelsin :)
Tesekkurler guzel bir anlatim fakat bazi noktalarda class a method , method a class demissiniz kafa karisikligi yaratabilir , bir de parent/child classlarda ki etkilesimleri anlatirken 2 class i da ekrana verebilirseniz anlamasi daha kolay olur . Saygilar
protected internal, aynı assembly (csproj) içerisindeki her yerden ulaşılabilir. Ancak assembly dışına çıktığımızda ise sadece bu objeyi kullanarak yeni bir obje oluşturduğumuzda kullanabiliyoruz. 'protected internal void Calc()' diye bir methodumuz varsa mesela ve diyelim ki bu Math class'ı altında duruyor, bunu başka bir assembly de doğrudan kullanamıyoruz. 'public class MathV2: Math' diye bir tanımlama yaparsak, ancak bu class'ın içinden Calc() metoduna ulaşabiliyoruz.
@@TechBuddyTR 8:00 da Namespace içerisinde ilk class tanımlamamızda private tanımlarken hata alıyoruz, bunu kast etmiştim. Burada bu hatayı almamızın sebebinin mantığını merak ettim. CS1527: Elements defined in a namespace cannot be explicitly declared as private, protected, protected internal, or private protected. Herhangi bir namespace tanımlamadan direkt public class MyClass {
} protected class MyClass2 { } bunu yazsakta bize aynı hatayı veriyor.
He tamam ben yanlış anlamışım olayı. Şöyle bir durum var orada. Namespace altında bir class'ı private tanımlayamıyoruz çünkü namespace'ler bir object olmadığı için private public vs gibi durumları da olamıyor. Ama bir şeyi private olarak tanımladığımızda sadece buradaki scope içirisinden erişilebilsin diyoruz ya. eğer namespace altına private bir class oluşturabilseydik, bu class sadece bu namespace altından erişilebilir demiş olacaktık. Ama böyle bir şey mümkün değil az önceki anlattığım sebeple. Dolayısı ile private bir şey, public, protected, internal vs gibi class lar içerisinde yer almalı. Bununla birlikte public veya internal tanımladığımız zaman class'ı bir namespace altına, bu class'lar başka class lardan da kullanılabilir demiş oluyoruz.
Merhaba hocam, bir namespace'in altında çalışmak ve onu daha sonra using ile başka bir classta kullanmak ile kalıtım almanın farkını kafamda tam oturtamadım. Yani bir namespace class'ın da üstünde bir yapı oluyor ve using kullanarak direkt onu mu miras almış oluyoruz? Yoksa ben olayları çok mu bocaladım?
İkisi çok farklı konular :) namespace dediğimiz şey; bir objenin o solution içerisinde nerede yer aldığını gösterdiği bir adres bilgisidir sadece. Öte yandan kalıtım yolu ise, adı üzerinde, o objenin tüm özelliklerinin başka bir objeye aktarılması gibi değerlendirilebilir.
Kütüphanelerinizi paket olarak yayınlayıp nuget paket yöneticisine yüklediğinizde internal ve private protected çok sık kullanılıyor (ihtiyaç duyuluyor).
Protected internal biraz kafamı karıştırmıştı, benim anladığım kadarıyla;
1) Internal diyerek methoda aynı kütüphanede izin veriyoruz diğer kütüphanelerde bir instance oluştursak da kullanamıyoruz. 2) Protected diyerek alt classlara methodu kullandırtabiliyoruz.
3) Protected internal yaparsak başka kütüphanede olan bir alt classa o methodu kullanabilme yetkisi veriyoruz ve aynı kütüphane içinde yine kullanabiliyoruz.
Güzel bir video olmuş hocam, bilgileri tazelemek amaçlı eğitim serilerinizi izliyorum. Bilgilerinizden istifade etmeye çalışıyorum, iyi çalışmalar kolay gelsin :)
Teşekkürler. Size de kolay gelsin :)
Tesekkurler guzel bir anlatim fakat bazi noktalarda class a method , method a class demissiniz kafa karisikligi yaratabilir , bir de parent/child classlarda ki etkilesimleri anlatirken 2 class i da ekrana verebilirseniz anlamasi daha kolay olur . Saygilar
Evet ara ara yapıyorum bu hataları :) Düzeltmem lazım.
Hocam video çok iyi olmuş elinize sağlık
Teşekkür ederim :)
hocam merhaba,ben protected internal'ı tam anlayamadım nerede çalışıp çalışmadığı kısmı biraz karışık geldi.Açıklayabilir misiniz acaba?
protected internal, aynı assembly (csproj) içerisindeki her yerden ulaşılabilir. Ancak assembly dışına çıktığımızda ise sadece bu objeyi kullanarak yeni bir obje oluşturduğumuzda kullanabiliyoruz. 'protected internal void Calc()' diye bir methodumuz varsa mesela ve diyelim ki bu Math class'ı altında duruyor, bunu başka bir assembly de doğrudan kullanamıyoruz. 'public class MathV2: Math' diye bir tanımlama yaparsak, ancak bu class'ın içinden Calc() metoduna ulaşabiliyoruz.
Hocam şuanda baktığımda file diye bir erişim belirleyici daha gelmiş. file den kasıt aynı class içerisi midir?
@@ahmedhakanokumus aynı dosya içerisinde. Bir dosya içerisinde birden fazla class oluşturabiliyoruz bazen
Namespace altında sadece public ve internal tanımlayabilmemizin arkasındaki mantık nedir? Neden private olarak tanımlayamıyoruz?
Tam olarak anlayamadım.
@@TechBuddyTR 8:00 da Namespace içerisinde ilk class tanımlamamızda private tanımlarken hata alıyoruz, bunu kast etmiştim. Burada bu hatayı almamızın sebebinin mantığını merak ettim.
CS1527: Elements defined in a namespace cannot be explicitly declared as private, protected, protected internal, or private protected.
Herhangi bir namespace tanımlamadan direkt
public class MyClass
{
}
protected class MyClass2
{
}
bunu yazsakta bize aynı hatayı veriyor.
He tamam ben yanlış anlamışım olayı. Şöyle bir durum var orada. Namespace altında bir class'ı private tanımlayamıyoruz çünkü namespace'ler bir object olmadığı için private public vs gibi durumları da olamıyor. Ama bir şeyi private olarak tanımladığımızda sadece buradaki scope içirisinden erişilebilsin diyoruz ya. eğer namespace altına private bir class oluşturabilseydik, bu class sadece bu namespace altından erişilebilir demiş olacaktık. Ama böyle bir şey mümkün değil az önceki anlattığım sebeple. Dolayısı ile private bir şey, public, protected, internal vs gibi class lar içerisinde yer almalı.
Bununla birlikte public veya internal tanımladığımız zaman class'ı bir namespace altına, bu class'lar başka class lardan da kullanılabilir demiş oluyoruz.
@@TechBuddyTR Bu kadar açıklayıcı bir cevap beklemiyordum. Teşekkür ederim, kafamda oturmasını sağladınız.
Merhaba hocam, bir namespace'in altında çalışmak ve onu daha sonra using ile başka bir classta kullanmak ile kalıtım almanın farkını kafamda tam oturtamadım. Yani bir namespace class'ın da üstünde bir yapı oluyor ve using kullanarak direkt onu mu miras almış oluyoruz? Yoksa ben olayları çok mu bocaladım?
İkisi çok farklı konular :)
namespace dediğimiz şey; bir objenin o solution içerisinde nerede yer aldığını gösterdiği bir adres bilgisidir sadece. Öte yandan kalıtım yolu ise, adı üzerinde, o objenin tüm özelliklerinin başka bir objeye aktarılması gibi değerlendirilebilir.
@@TechBuddyTR Cevabınız için teşekkür ederim, gayet açıklayıcı oldu :)