Classe vs. classe pública

Qual é a diferença entre:

namespace Library{
    class File{
        //code inside it
   }
}

e:

namespace Library{
   public class File{
       //code inside it
   }
}
Então, qual será a diferença entre a classe pública e a classe?

Author: driis, 2012-09-12

3 answers

Sem especificar {[1] } A classe é implicitamente internal. Isto significa que a classe só é visível dentro do mesmo conjunto. Quando você especificar public, A classe é visível fora do conjunto.

Também é permitido especificar o modificador internal explicitamente:

internal class Foo {}
 58
Author: driis, 2012-09-12 16:48:36

O primeiro é equivalente a:

namespace Library{
    internal class File{
        //code inside it
   }
}

Todas as visibilidades predefinidas para o menos visível possível - private para os membros de class es e struct s (métodos, propriedades, campos, classes aninhadas e aninhadas enums) e internal para os membros directos de namespaces, porque não podem ser privadas.

internal significa que outro código na mesma montagem pode vê-lo, mas nada mais (salvo as Assembleias de amigos e o uso da reflexão).

Isto faz sentido para dois. motivos:
    Devias estar conscientemente a fazer com que as coisas usem a menor visibilidade possível, para reforçar a tua encapsulação. Se eles não cumprissem o prazo, pode tornar algo público que deve ser privado ou interno. Se você acidentalmente fazer algo não visível o suficiente, você obter um erro de compilação óbvio e corrigi-lo. Se você acidentalmente fazer algo muito visível você introduz uma falha no seu código que não será marcado como um erro, e que será uma mudança para consertar depois.

Muitas vezes é considerado um estilo melhor ser explícito com seus modificadores de Acesso, para ser mais claro no código, apenas o que está acontecendo.

 21
Author: Jon Hanna, 2012-09-12 16:55:37

Por padrão, todos os classes (e de todos os tipos, para que o assunto) são internal, então, para que eles sejam acessíveis a partir do exterior (sans coisas como InternalsVisibleToAttribute), você tem que torná-los public explicitamente.

 1
Author: Anton Gogolev, 2012-09-12 16:48:26