¿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
Respuesta
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.
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.
El valor predeterminado es interno, no privado. http://msdn.microsoft.com/en-us/library/ms173121.aspx – sliderhouserules
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.
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.
¡Guau, exactamente lo que estaba buscando! –
Por razones de seguridad.
Quiere exponer ciertos métodos y no toda su clase.
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.
- 1. cmd se establece de manera predeterminada en F: unidad
- 2. ¿Por qué la tarea keepalive de Sitecore se establece en 1 hora de manera predeterminada?
- 3. Clase interna privada sintetiza clase anónima inesperada
- 4. Activator.CreateInstance con la clase sellada privada
- 5. Concepto de clase privada en C#
- 6. ¿hay alguna manera fácil de exponer los métodos de la clase padre privada C++
- 7. Diagramas de aplicaciones VS.NET
- 8. C# clase base privada (oculta)
- 9. ¿Cómo uso la clase OpenFileDialog de manera que se abra en el área de red como predeterminada?
- 10. ¿Clase base privada errónea inaccesible?
- 11. Enrutamiento de Ember.js: ¿cómo se establece una ruta predeterminada para procesar de inmediato?
- 12. puntero a la clase base y la herencia privada
- 13. ¿Cómo se establece de forma predeterminada la opción empty_value en un tipo de campo de formulario personalizado de Symfony?
- 14. Android: recomendaciones de AsyncTask: clase privada o clase pública?
- 15. No puedo hacer ningún paquete de clase privada en Scala?
- 16. Cómo comprobar si la variable de objeto se establece
- 17. Omitir el complemento maven2 de manera predeterminada
- 18. MSBuild compila de manera predeterminada la configuración de depuración
- 19. ¿Cuándo se establece HttpContext.User.Identity?
- 20. función de amigo en clase derivada con herencia privada
- 21. ventana de Excepción en VS.NET 2010 no se encuentra la columna "User-no controlada"
- 22. donde se establece $ PATH en xcode?
- 23. Mostrar todos los archivos de manera predeterminada
- 24. ¿Puede una clase @Embeddable ser privada?
- 25. cómo configurar la clase principal predeterminada en java?
- 26. Subclasificación de una clase privada (soporte) en AVM2
- 27. index.php no cargando de manera predeterminada
- 28. ¿Cómo se establece origen/HEAD?
- 29. ¿Es posible tener una clase privada?
- 30. ¿Cómo proteger los errores tipográficos cuando se establece el valor para los miembros de la clase?
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