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?
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 {}
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 enum
s) e internal
para os membros directos de namespace
s, 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).
-
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.
Por padrão, todos os class
es (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.