Question

J'ai une classe nommée A et une classe B

public class A : UserControl { }

public class B : UserControl { }

Maintenant, j'ai un ensemble dont la fonction de classe accepte les objets de classe A. Cet ensemble est pas créé par moi donc je ne dispose d'aucun contrôle. Fondamentalement, il est l'assemblage 3ème partie.

Mais je veux fournir mes objets de la classe B, car il est peu personnalisé. Rassurez-vous qu'il contient toutes les propriétés de la classe A. Comment puis-je typecast mon objet de classe B type A afin que je puisse intégrer l'assemblage 3ème partie dans mon projet, ainsi que de personnaliser l'apparence en fonction de mes besoins?

Si je donc quelque chose comme (A)objB il est interdit. Alors j'ai essayé ceci:

UserControl control = objB as UserControl;

A objA = control as A;

Mais le problème dans ce cas est objA est nulle.

Pour éviter toute confusion: classe A et est fourni par assemblage 3ème partie.

Merci à l'avance:)

Était-ce utile?

La solution

Compte tenu de la hiérarchie, vous devrez écrire un opérateur de conversion. Il est construit en aucune façon de le faire en général (pensez Dog : Animal et Cat : Animal):

public static explicit operator A(B b) {
    // code to populate a new instance of A from b
}

Vous pouvez également utiliser un cadre de réflexion générique et faire quelque chose comme

public static void PropertyCopyTo<TSource, TDesination>(
    this TSource source,
    TDestination destination
) {
    // details elided
}

alors vous pourriez dire

// b is B
// a is A
b.PropertyCopyTo<A>(a);

qui copie toutes les propriétés communes entre b à a.

Autres conseils

Pour B être coulable à un A, doit de B inherits A. Même si B contient toutes les propriétés de A, il est toujours pas A.

vous pouvez utiliser un motif adaptateur

Voir

Si B ne peut pas être jeté à A (comme dans B is A) il est impossible de réaliser ce que vous essayez de faire sans héritant de A. Malheureusement C # ne prend pas en charge canard frappe contrairement à de nombreux langages dynamiques (c.-à-Ruby).

Vous pouvez hériter de la classe A:

public class B : A {
}

Et si vous avez besoin overrride certaines méthodes / propriétés qui se trouve juste à les virtual en classe A.

Je pense que vous ne pouvez pas vraiment le faire.

Pourquoi ne pas ajouter vos propriétés à une classe partielle A?

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