Klasa A Klasa Publiczna
Jaka jest różnica między:
namespace Library{
class File{
//code inside it
}
}
I:
namespace Library{
public class File{
//code inside it
}
}
Jaka więc będzie różnica między klasą publicznąa klasą?
3 answers
Bez podania public
klasa jest domyślnie internal
. Oznacza to, że klasa jest widoczna tylko wewnątrz tego samego zespołu. Po określeniu public
klasa jest widoczna poza złożeniem.
Dozwolone jest również podanie modyfikatora internal
jawnie:
internal class Foo {}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-12 16:48:36
Pierwszy jest odpowiednikiem:
namespace Library{
internal class File{
//code inside it
}
}
Wszystkie wizualizacje domyślnie są najmniej widoczne - private
dla członków class
es I struct
s (metody, właściwości, pola, zagnieżdżone klasy i zagnieżdżone enum
s) I internal
dla członków bezpośrednich namespace
s, ponieważ nie mogą być prywatne.
internal
oznacza to, że inny kod w tym samym złożeniu może go zobaczyć, ale nic innego (poza złożeniami przyjacielskimi i użyciem reflection).
Ma to sens z dwóch powodów:
- ty powinieneś świadomie robić rzeczy z możliwie najmniejszej widoczności, aby wzmocnić swoją enkapsulację.
- Jeśli nie wywiązali się z
public
możesz przypadkowo upublicznić coś, co powinno być prywatne lub wewnętrzne. Jeśli przypadkowo zrobisz coś, co nie jest wystarczająco widoczne, otrzymasz oczywisty błąd kompilacji i naprawisz go. Jeśli przypadkowo sprawisz, że coś będzie zbyt widoczne, wprowadzasz do kodu wadę, która nie zostanie oznaczona jako błąd, a która będzie przełomową zmianą do naprawienia później.
Jest często uważane za lepszy styl, aby być wyraźnym z modyfikatorami dostępu, aby być jaśniejszym w kodzie, tylko to, co się dzieje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-12 16:55:37
Domyślnie wszystkie class
es (i wszystkie typy) są internal
, więc aby były dostępne z zewnątrz (bez takich rzeczy jak InternalsVisibleToAttribute
), musisz je jawnie utworzyć public
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-12 16:48:26