CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

c# interface

darkepsylon
darkepsylon
Niveau 10
06 octobre 2020 à 18:23:44

Salut tout le monde, j'ai un problème avec des interfaces, je m'explique, j'ai une classe A et une classe B, la classe B hérite de A

j'ai donc 2 interface, IA et IB.

L'interface A contient une liste de B.

dans un souci de code "generique" ( fonction qui doit marcher sur une application windows et android, 2 code source différent), mon interface B doit hérité de mon interface A, le problème c'est que quand je fais ça je me retrouve avec une erreur visible ci dessous :
https://image.noelshack.com/fichiers/2020/41/2/1602001117-devenv-jiwu5r9o4r.png

et le pastbin qui va bien :
http://pastebin.fr/68268

Vous pourriez m'expliquer pourquoi ? et si je fais mal les choses comment je devrais les faire ?

boucif
boucif
Niveau 24
06 octobre 2020 à 22:06:57

What the fuck pourquoi ton interface doit implémenter un type correspondant à l’interface qui en hérite c’est tiré par les cheveux.
Quel est le réel but de tout ça et avec xamarin tu peux utiliser des bibliothèques net standard et donc partager du code entre ton app windows et android

Message édité le 06 octobre 2020 à 22:07:12 par boucif
Hraezvelg
Hraezvelg
Niveau 6
06 octobre 2020 à 22:51:21

Pas sûr à 100% de la réponse vu que c'est assez difficile à comprendre :
La classe Formulairefield hérite de Formulaire, qui implémente IFormulaire<Formulairefield>, d'où le fait que tu aies mis dans la classe Formulaire :

public List<Formulairefield> ListField { get; set; }

pour implémenter l'interface.

Jusque là OK.

Sauf que ta classe Formulairefield implémente IFormulaireField, qui elle-même "hérite" de IFormulaire<IFormulaireField>, donc il faudrait mettre dans la classe Formulairefield pour respecter l'implémentation correctement :

public List<IFormulaireField> ListField { get; set; }

Le problème c'est que l'implémentation existe déjà dans Formulaire (le code au balisé en premier). Je ne sais pas si c'est exactement ça le problème, mais du coup tu essayes de faire cohabiter un List<Formulairefield> et List<IFormulaireField>, et comme un IFormulaireField n'est pas (c'est pas de l'héritage mais tu as compris) forcément un Formulairefield, ça pose problème.

Solution :

1) Virer

 IFormulaire<IFormulaireField> 

de la ligne 14, car il sert pas à grand chose, et ça permet d'implémenter une fois la liste, mais si tu estimes que tu en as besoin, alors, autre solution :

2) Change

public class Formulaire : IFormulaire<Formulairefield>
    {
        public List<Formulairefield> ListField { get; set; }

par

public class Formulaire : IFormulaire<IFormulaireField>
    {
        public List<IFormulaireField> ListField { get; set; }

ce qui permet d'avoir le même type (IFormulaireField) pour la liste, bien que venant de deux interfaces différentes.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment