Qué es y cómo se puede usar en C#.
¿Puedes usar el mismo concepto en Python/Perl?¿Qué es una clase parcial?
Respuesta
La clase parcial de C# ya se ha explicado aquí, así que solo cubriré la parte de python. Puede usar herencia múltiple para distribuir elegantemente la definición de una clase.
class A_part1:
def m1(self):
print "m1"
class A_part2:
def m2(self):
print "m2"
class A(A_part1, A_part2):
pass
a = A()
a.m1()
a.m2()
A partial type (no tiene que ser una clase; las estructuras y las interfaces también pueden ser parciales) es básicamente un tipo único que tiene su código distribuido en varios archivos.
El uso principal de esto es permitir que un generador de código (por ejemplo, un diseñador de Visual Studio) "posea" un archivo, mientras que el código escrito a mano se coloca en otro.
No tengo idea de si Python/Perl tienen las mismas capacidades, me temo.
No hay compilador, por lo que no hay coincidencias cercanas en Python. Hay clases abstractas, que no se pueden usar de manera significativa; una subclase es la forma habitual de completarlos. O siempre puedes hacer un parche en las características que faltan :-( –
No soportado directamente en python, pero podrías hackearlo haciendo una clase base de la otra clase. MyClass (MyClassPartial). Esto es probablemente lo que S.Lott quiso decir con ' clases abstractas '. Plan b: use decorators: @MyClassPartialFun \ nclass MyClass (object) – Aaron
*** Jon Skeet no sabe? *** El Universo acaba de lanzar una excepción. – MikeTheLiar
Como Python es un lenguaje dinámico, no necesita un concepto como clase parcial. En python es posible extender el objeto con funcionalidad en tiempo de ejecución para poder romper la declaración de clase en diferentes archivos
El concepto de tipos parciales ya se ha explicado.
Esto se puede hacer en python. Como ejemplo, haga lo siguiente en un shell de python.
class A(object):
pass
obj = A()
def _some_method(self):
print self.__class__
A.identify = _some_method
obj.identify()
Esto sería parche de mono. –
Una clase parcial es simplemente una clase que está contenida en más de un archivo. A veces es para que una parte se genere en máquina y otra parte sea editada por el usuario.
Los uso en C# cuando estoy haciendo una clase que se está haciendo demasiado grande. Pondré los accesos y constructores en un solo archivo y todos los métodos interesantes en un archivo diferente.
En Perl, sólo tendría dos (o más) archivos que indiquen cada a sí mismos en un paquete:
(programa principal)
use MyClass;
(en MyClass.pm)
use MyClassOtherStuff;
package MyClass;
# [..class code here...]
(en MyClassOtherStuff.pm)
package MyClass;
# [...rest of code here...]
A Tipo parcial es un tipo cuya declaración está separada en varios archivos. Tiene sentido usarlos si tiene una gran clase, que es difícil de manejar y leer para un desarrollador típico, para separar esa definición de clase en archivos separados y para poner en cada archivo una sección de código separada lógicamente (por ejemplo, todos los públicos métodos y propiedades en un archivo, privado en otro, código de manejo de datos en tercera y así sucesivamente ...)
No, no tiene el mismo elemento sintáctico en Python.
Python también tiene metaclases pero se parece más a una clase de plantilla que a una clase parcial. Un buen ejemplo de uso de clase meta es el Django ORM. Todos sus modelos de tabla heredan de una clase de modelo base que también obtiene funcionalidad incluida de una metaclase. Es un concepto muy bueno que permite un patrón de registro activo (¿es un registro activo completo?).
Clase parcial es útil cuando tiene auto-generated code
por alguna herramienta. Refiera la pregunta Project structure for Schema First Service Development using WCF para un ejemplo.
Puede poner su lógica en la clase parcial. Incluso si el archivo generado automáticamente se destruye y vuelve a crear, su lógica persistirá en la clase parcial.
- 1. ¿Bajo qué condiciones es bueno tener una "clase parcial"?
- 2. ¿Puedo llamar a una función definida en una clase parcial de otra clase parcial? ¿Es posible?
- 3. ¿Cuándo una función parcial scala no es una función parcial?
- 4. C# clase parcial
- 5. ¿Qué significa el parcial?
- 6. Clase parcial para el controlador
- 7. especialización parcial de un método en una clase de plantilla
- 8. ¿Qué es una clase de extensión?
- 9. ¿Por qué String es una clase?
- 10. ¿Qué es una clase en PHP?
- 11. ¿Qué es una clase de controlador? (Java)
- 12. ¿Por qué es android.os.Bundle una clase final?
- 13. ¿Qué es una clase invariante en java?
- 14. ¿Cuáles son los beneficios de usar una clase parcial en lugar de una clase abstracta?
- 15. Clase parcial en diferentes espacios de nombres
- 16. Anulación constructor por defecto de la clase parcial con otra clase parcial
- 17. anula un método que usa una clase parcial
- 18. C# 3.5 clase parcial cadena IsNullOrWhiteSpace
- 19. Definición de clase parcial en C++?
- 20. burla parcial de clase con Moq
- 21. clase parcial con el método mismo nombre
- 22. Acceso directo de clase parcial de grupo
- 23. especialización parcial de una plantilla
- 24. Campos de clase de acceso de la clase parcial
- 25. Anulación parcial de una propiedad de automóvil virtual en una clase infantil
- 26. ¿Por qué no hay una función parcial tipo literal?
- 27. ¿Por qué Google no ofrece una búsqueda parcial? ¿Es porque el índice sería demasiado grande?
- 28. ¿Por qué es necesario marcar una clase como serializable?
- 29. ¿Por qué una clase interna serializable no es serializable?
- 30. ¿Qué es una clase interna sellada en C#?
Mucho mejor que el monopatch enfoques en otras respuestas. +1 –