Po co jest modyfikator internal
w C#, skoro domyślnie klasy, metody itd. są właśnie internal
?
jak w jednym plku zrobisz
internal class BaseClass
to w innym pliku nie będziesz mógł utworzyć obiektu tej klasy.
https://docs.microsoft.com/pl-pl/dotnet/csharp/language-reference/keywords/internal
Ale pola, właściwości i metody domyślnie mają private
więc jednak internal
się przydaje.
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/accessibility-levels
Internal
nie tyczy się plików tylko assembly
to odnośnie komentarza wyżej.
Da się w konfiguracji projektów ustawić żeby jakieś assembly widziały internale innego ale tego raczej się nie powinno robić, ewentualnie jakieś sytuacje kryzysowe przy projektach z testami jednostkowymi.
Przepraszam, źle się wyraziłem. Chodziło mi o klasy i struktury. Czasami widzę, jak ludzie piszą internal class
. Czy kompilator nie powinien zgłosić błędu w takiej sytuacji?
Ale czemu powinien? Jak napiszesz private
przy polu to tez nie zgłosi, a jest to przecież domyśle i nadmiarowe.
Błąd zgłosi jak zrobisz coś niedozwolonego, R# i chyba nowy Visual(tu nie jestem pewien) zasugerują chyba coś w stylu "nadmiarowego kodu" ale to jest sugestia.
Osobiście jednak preferuje pisanie modyfikatorów nawet jeśli pokrywają domyślne dla lepszej czytelności kodu i zaznaczenia faktu że używam danego modyfikatora ze świadomością, a nie bo tak jest domyślnie. Nie jest to jakaś wielka nadmiarowości kodu i nie zaciemnia go, ale tu może ktoś bardziej doświadczony się wypowie bo to raczej osobista preferencja.
Chodzi o to, że każde assembly powinno wystawiać jakieś publiczne API, które pozwala komuś z tego assembly korzystać. A zatem, żeby użytkownik takiego assembly nie miał problemu z rozróżnieniem, których klas powinien używać, a których nie, te wewnętrzne w ramach assembly oznacza się jako internal
.
A, że większość "programistów", zwłaszcza "seniorów" I tak robi wszystko public
, bo "inaczej się nie da testować i IoC nie działa", efektem czego jest totalny syf, to już inna choroba.
Nieposkromiony Pomidor napisał(a):
Przepraszam, źle się wyraziłem. Chodziło mi o klasy i struktury. Czasami widzę, jak ludzie piszą
internal class
. Czy kompilator nie powinien zgłosić błędu w takiej sytuacji?
A po co?
W wyrażeniu (2 + 2) + 2
nawias też jest nadmiarowy, ale to nie powód by było to od razu błędem. Taki język byłby uciążliwy w używaniu.
Ja lubię jawność, dlatego dla mnie używanie słowa kluczowego internal
ma sens i powodem nie jest to, że nie wiedziałbym, jaki jest domyślny modyfikator, gdyby nie był jawnie podany. Ale też myślę, że unikanie internal
tylko dlatego, że jest nadmiarowe, i jednoczesne używanie protected internal
w innych miejscach wprowadzałoby lekki chaos w sposobie rozumowania. Jakoś tak to czuję. Gdybym nie miał nierówno pod sufitem, to myślałbym inaczej :P
Nieposkromiony Pomidor napisał(a):
Przepraszam, źle się wyraziłem. Chodziło mi o klasy i struktury. Czasami widzę, jak ludzie piszą
internal class
. Czy kompilator nie powinien zgłosić błędu w takiej sytuacji?
Nie rozumiem czemu kompilator mialby rzucac blad. Idac ta logika powinien rowniez rzucac blad przy deklarowaniu pola klasy jako private.