2008-09-02 7 views
6

¿Por qué Visual Studio declara nuevas clases como privadas en C#? Casi siempre los cambio a público, ¿soy el loco?VS.NET se establece de manera predeterminada en la clase privada

+0

En realidad, el nivel de acceso predeterminado para una clase, estructura o interfaz es interno, no privado. 'Internal es el valor predeterminado si no se especifica ningún modificador de acceso' y' al igual que las clases y las estructuras, las interfaces predeterminadas para el acceso interno' De: [MSDN] (http://msdn.microsoft.com/en-us/library/ms173121. aspx) – sliderhouserules

Respuesta

8

El acceso privado por defecto parece ser una opción de diseño razonable por parte de los especificadores de lenguaje C#.

Un buen principio de diseño general es hacer que todos los niveles de acceso sean lo más restrictivos posible para minimizar las dependencias. Es menos probable que termine con el nivel de acceso incorrecto si comienza lo más restrictivo posible y hace que el desarrollador tome alguna medida para hacer que una clase o miembro sea más visible. Si algo es menos público de lo que necesita, entonces eso es aparente inmediatamente cuando obtiene un error de compilación, pero no es tan fácil detectar algo que es más visible de lo que debería ser.

-1

C++, del que se deriva C#, especificó que el nivel de acceso de clase predeterminado es privado. C# lleva esto adelante para bien o para mal.

+0

El valor predeterminado es interno, no privado. http://msdn.microsoft.com/en-us/library/ms173121.aspx – sliderhouserules

0

No Siempre tengo que golpear esa palabra clave "pública" en el frente de la clase, para que no esté solo. Supongo que los diseñadores de plantillas pensaron que era una buena idea comenzar con lo básico. Puedes editar estas plantillas en tu instalación de Visual Studio, si realmente te molesta mucho, pero todavía no he llegado a ese punto.

16

no estoy seguro de por qué hace eso, pero aquí es lo que haces con el fin de obtener Visual Studio para crear la clase como Public por defecto:

Ir a “Archivos de programa \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ ItemTemplates \ CSharp \ Código \ 1033 ", se encuentra un archivo llamado Class.zip, dentro del archivo .zip abrir el archivo llamado Class.cs, el contenido del archivo tiene el siguiente aspecto:

using System; 
using System.Collections.Generic; 
$if$ ($targetframeworkversion$ == 3.5)using System.Linq; 
$endif$using System.Text; 

namespace $rootnamespace$ 
{ 
    class $safeitemrootname$ 
    { 
    } 
} 

Todo lo que necesita hacer es agregar "Público" antes del nombre de la clase. El resultado debe ser similar a esto:

using System; 
using System.Collections.Generic; 
$if$ ($targetframeworkversion$ == 3.5)using System.Linq; 
$endif$using System.Text; 

namespace $rootnamespace$ 
{ 
    public class $safeitemrootname$ 
    { 
    } 
} 

Una última cosa que necesita hacer es al ras todas las plantillas de Visual Studio está utilizando, y hacer que se vuelva a cargar ellos. El comando para que sea (se necesita un tiempo fin de celebrar en):

devenv /installvstemplates 

Y eso es todo, no hay más clases privadas por defecto. Por supuesto, también puede agregar interno o lo que quieras.

Source

+0

¡Guau, exactamente lo que estaba buscando! –

-2

Por razones de seguridad.

Quiere exponer ciertos métodos y no toda su clase.

0

Incluso si marca una clase como pública, los miembros siguen siendo privados por defecto. En otras palabras, la clase es bastante inútil fuera del mismo espacio de nombres. Creo que hacerlo público por defecto en su lugar puede ir demasiado lejos, sin embargo. Intenta usar algo 'interno'. Debe proporcionar suficiente acceso para más propósitos.

Cuestiones relacionadas