Po co jest modyfikator 'internal' w C#?

0

Po co jest modyfikator internal w C#, skoro domyślnie klasy, metody itd. są właśnie internal?

0

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

0

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.

0

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?

1

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.

0

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.

1
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.

1

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

1
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1