Estoy tratando de aprender la forma correcta de usar clases en mi código, cuando no es algo obvio como un conjunto de clientes, perros que heredan de animales, etc.¿Es malo intentar y tener clases distintas de main/form1 que interactúan entre sí?
He roto grandes secciones de código en "características" como Installer.cs
, Downloader.cs
, UiManager.cs
. La única forma en que puedo encontrar que esas clases interactúen con las propiedades y los métodos de los demás es hacer que sean estáticas, lo que me han dicho en otra pregunta es el camino equivocado.
Así que mi problema es de 3 cosas:
Hay una manera de hacer clases de hablar unos con otros que simplemente no entiendo todavía.
Las clases nunca deben tratar de hablar entre ellas, sino realizar acciones únicas y luego devolver algo a
main/form1
, que la clase principal puede usar para pasar a otra clase para una acción única.Las clases son realmente solo útiles para hacer muchas instancias, y hay otra estructura completamente que necesito aprender para abstraer grandes porciones de funcionalidad de la clase principal.
Todos los tutoriales que puedo encontrar y conferencias que miro parecen a decir solamente cómo las clases de trabajo, pero no cuándo y cómo utilizarlos en un producto real.
EDITAR - Un ejemplo más específico:
decir que tengo una cadena que es fundamental para la aplicación completa, y tiene que ser visto y/o modificado potencialmente por cada clase. ¿Cómo muevo esa información alrededor del código sin tener todo en una clase o hacerlo estático?
No veo la manera de dejar que la cadena viva en Form1
sin hacerla estática (porque todos los eventos de formulario y funciones necesitarían poder verla para pasarla a una clase).
No veo la manera de poner la cadena en otra clase sin tener que hacer que la cadena y toda la clase sean estáticas, para que otras clases puedan ver en ella.
Quizás haya algo que me falta acerca de crear instancias de las clases y hacer que los objetos interactúen entre ellos.
Esta es una gran pregunta y uno que no puede ser respondido fácilmente Considere leer algunos libros sobre OOP y [Patrones de diseño] (http://www.amazon.co.uk/Head-First-Design-Patterns-Freeman/dp/0596007124/ref=sr_1_fkmr0_1?ie=UTF8&qid=1346955994&sr=8 -1-fkmr0). –
Vote para cerrar como "si el libro se puede escribir para responder ...". Otro conjunto de libros serían libros sobre TDD. Es decir. algunos referenciados aquí http://stackoverflow.com/questions/880401/what-book-on-tdd-for-c-sharp-with-treatment-of-mocks. –
Es una muy gran pregunta, de hecho. Para al menos ayudarlo, considere que sus _classes_ probablemente no se comuniquen entre sí, pero _objects_ instanciados de esas clases ciertamente pueden hacerlo. Por supuesto, querrá mantener las dependencias entre objetos al mínimo, solo por razones de compatibilidad. Siga las reglas generales como "requiere, no crea instancias" lo que significa que si una función en la Clase A necesita una instancia de la Clase B, entonces debería requerir que se le dé una, no crearla internamente. Hay un poco más de todo esto, por supuesto. – David