Question

J'ai actuellement une solution avec plusieurs projets qui utilisent le plus souvent les mêmes classes. En conséquence, il me semble que ce serait une bonne idée d'ajouter une bibliothèque de classes contenant ces classes dans la solution au lieu de répéter la classe dans chaque projet.

Cependant, un projet, j'ai besoin de quelques propriétés supplémentaires à certaines des classes qui sont spécifiques à ce projet et ne seront pas utilisés nulle part ailleurs. En conséquence, je pensais que je devrais utiliser des classes partielles pour ajouter ces propriétés. Donc, je l'ai fait quelque chose comme ceci:

Dans la bibliothèque de classes:

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; }
    }
}

Dans le projet (MyProject):

namespace MyClassLibrary
{
    public partial class Book
    {
        public string AdditionalProperty { get; set; }
    }
}

J'ai référencé MyClassLibrary dans MyProject (Windows C # forme app), mais lorsque je tente d'utiliser cette classe dans le codebehind pour la forme que je reçois l'erreur suivante:

  

MyClassLibrary.Book de classe

     

Attention: Le type   'MyClassLibrary.Book' dans « C: ...   (Projet) » conflits avec les importations   type 'MyClassLibrary.Book' dans « C: ...   (Bibliothèque de classes DLL). L'utilisation du type   défini dans. 'C: ... (projet)'

Toute idée de ce que je fais mal ou si mon approche globale est mauvaise et que je devrais faire autre chose?

Était-ce utile?

La solution

Partials ne sont pas pour les assemblées couvrants. Si vous devez ajouter à votre classe pour un type plus spécifique d'utilisation, vous devez créer une classe dérivée:

public class MyFoo
{
    public string BasicProperty {get;set;}
}

public class MySpecificFoo : MyFoo
{
    public string AnotherProperty {get;set;}
}

Dans votre projet exigeant le type plus spécifique de MyFoo, utiliser à la place MySpecificFoo. Comme il hérite / dérive de MyFoo, il aura toutes les propriétés et les fonctionnalités de MyFoo, avec les autres propriétés ainsi. Cela fait partie de Polymorphisme , qui est l'endroit où la puissance réelle de la POO réside.

Autres conseils

En bref, vous ne pouvez pas utiliser des classes partielles à travers des projets . Toute la source doit être compilé en même temps, et ce qui est fait par projet.

Voici une discussion complète sur le SO à ce sujet: Si vous utilisez un classe partielle à travers des projets?

Pour ce que vous essayez de faire, vous devriez plutôt essayer d'utiliser les classes de base et l'héritage. Ou mieux encore composition objet .

Je pense que cela est plus le long des lignes de ce que vous essayez d'atteindre.

Mettez toutes vos classes communes dans un projet de bibliothèque de classe et le compiler à une DLL.

Vous pouvez ensuite référencer cette DLL dans des projets externes. Chaque fois que vous devez ajouter une propriété à elle pour le projet externe, vous pouvez alors hériter de la classe et ajoutez la propriété là-bas.

tout faux. Vous devriez envisager des méthodes partielles à la place. Look « em up. Ils sont exactement ce que vous avez demandé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top