c# - parcial - public partial class definicion
Clases parciales de C# (5)
Actualmente tengo una solución con varios proyectos que utilizan principalmente las mismas clases. Como resultado, me pareció que sería una buena idea agregar una biblioteca de clases que contenga estas clases en la solución en lugar de repetir la clase en cada proyecto.
Sin embargo, un proyecto que tengo requiere algunas propiedades adicionales para algunas de las clases que son específicas de ese proyecto y no se utilizarán en ningún otro lugar. Como resultado, pensé que debería usar clases parciales para agregar estas propiedades. Así que he hecho algo como esto:
En la biblioteca de clases:
namespace MyClassLibrary
{
public partial class Book
{
public string Title { get; set; }
public string AuthorLast { get; set; }
public string AuthorFirst { get; set; }
public string Publisher { get; set; }
public string Edition { get; set; }
public string ISBN10 { get; set; }
public string ISBN13 { get; set; }
}
}
En el proyecto (MyProject):
namespace MyClassLibrary
{
public partial class Book
{
public string AdditionalProperty { get; set; }
}
}
Me he referido a MyClassLibrary en MyProject (una aplicación de formulario de C # windows), sin embargo, cuando intento usar esta clase en el código para el formulario, recibo el siguiente error:
clase MyClassLibrary.Book
Advertencia: el tipo ''MyClassLibrary.Book'' en ''C: ... (Proyecto)'' entra en conflicto con el tipo importado ''MyClassLibrary.Book'' en ''C: ... (DLL de biblioteca de clases)''. Utilizando el tipo definido en ''C: ... (proyecto)''.
¿Alguna idea de lo que estoy haciendo mal o si todo mi enfoque es malo y debería estar haciendo otra cosa?
Creo que esto está más en la línea de lo que estás tratando de lograr.
Coloque todas sus clases comunes en un proyecto de biblioteca de clases y compílelas en una DLL.
A continuación, puede hacer referencia a esa DLL en proyectos externos. Cada vez que necesite agregar una propiedad para el proyecto externo, puede heredar la clase y agregar la propiedad allí.
En resumen, no puedes usar clases parciales en los proyectos . Toda la fuente debe compilarse al mismo tiempo, y eso se hace por proyecto.
Aquí hay una discusión completa sobre SO sobre esto: ¿Debería usar una clase parcial en todos los proyectos?
Los parciales no son para asambleas que abarcan. Si necesita agregar a su clase para un tipo de uso más específico, debe crear una clase derivada:
public class MyFoo
{
public string BasicProperty {get;set;}
}
public class MySpecificFoo : MyFoo
{
public string AnotherProperty {get;set;}
}
En su proyecto que requiera el tipo más específico de MyFoo, utilice MySpecificFoo en su lugar. Dado que hereda / deriva de MyFoo, tendrá todas las propiedades y funcionalidades de MyFoo, con las propiedades adicionales también. Esto es parte del Polymorphism , que es donde reside el poder real de la POO.
Por lo que está tratando de hacer, debería tratar de usar las clases base y la herencia. O incluso mejor composición de objetos .
todo mal. Debes considerar métodos parciales en su lugar. Míralos. Son exactamente lo que pediste.