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ą?

Author: driis, 2012-09-12

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 {}
 58
Author: driis,
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 classes 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:

  1. ty powinieneś świadomie robić rzeczy z możliwie najmniejszej widoczności, aby wzmocnić swoją enkapsulację.
  2. 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.

 21
Author: Jon Hanna,
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.

 1
Author: Anton Gogolev,
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