IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Microsoft livre un aperçu des nouveautés de C# 8.0


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Dev
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Par défaut
    Citation Envoyé par tatayo Voir le message
    J'ai un petit problème avec l'implémentation par défaut dans une interface.
    C# n'implémente pas l'héritage multiple, car "on ne sait pas quoi faire si une classe hérite de 2 classes qui implémentent la même méthode".

    Quid d'une classe qui hérite de 2 Interfaces qui implémentent la même méthode ? On se retrouve avec le même "problème".

    Tatayo.
    en java, si une classe implémente 2 interface qui definisse la même méthode par défaut. Il faut implémente obligatoirement dans la classe.
    Il doit avoir le même cas en c#

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par miaous Voir le message
    en java, si une classe implémente 2 interface qui definisse la même méthode par défaut. Il faut implémente obligatoirement dans la classe.
    Il doit avoir le même cas en c#
    En C#, il est possible d'implémenter un membre d'une interface de manière implicite ou explicite. En cas de présence de deux implémentations, il serait possible d'avoir un code qui compile, mais il serait alors obligatoire de préciser l'interface utilisée lors de l'appel à la méthde, pour savoir quelle version utilisée. Je n'ai pas regardé en détail au niveau de ce cas, donc je ne sais pas si c'est supporté. Mais c'est une possibilité.


    Au sujet des références nullables, je ne suis pas contre sur le principe. Cela peut permettre d'éclaircir le code. Par contre, ce que je trouve dommage, c'est que c'est un changement générant une incompatibilité avec le code déjà existant. Un point fort de C# jusqu'à présent était sa compatibilité et sa pérennité (qui en prennent un coup pour le coup).

    Si .NET Core 3.0 ainsi que Xamarin, Unity et Mono implémenteront complètement .NET Standard 2.1, .NET Framework 4.8 ne le fera pas.
    Cette phrase est trompeuse car sous-entend que .NET Framework 4.8 implémentera partiellement .NET Standard 2.1. Certains ajouts de C#8 ne seront pas supportés par le framework 4.8 car il ne sera pas compatible .NET Standard 2.1. Ce n'est pas une compatibilité "à la carte" où le framework .NET 4.8 implémenterait de manière partielle .NET Standard 2.1. Le framework .NET 4.8 implémentera uniquement .NET Standard 2.0, et comme certaines fonctionnalités de C#8 dépendront de type introduit par la version 2.1, ces fonctionnalités ne seront donc pas présentes.

    Ce choix a été fait pour des raisons de compatibilité justement et pour ne pas risquer de casser des programmes existants, car certaines de ces fonctionnalités nécessitent une mise à jour du CLR.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 468
    Par défaut
    Citation Envoyé par J@ckHerror Voir le message
    Au sujet des références nullables, je ne suis pas contre sur le principe. Cela peut permettre d'éclaircir le code. Par contre, ce que je trouve dommage, c'est que c'est un changement générant une incompatibilité avec le code déjà existant. Un point fort de C# jusqu'à présent était sa compatibilité et sa pérennité (qui en prennent un coup pour le coup).
    Au contraire pour moi c'est une grande force d'accepter de corriger une GROSSE erreur où tellement d'autres seraient rester sur "oui mais on a toujours fait comme ça", "pas besoin de compliquer un truc facile", "ça dérange seulement les mauvais programmeurs"

  4. #4
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Citation Envoyé par Kikuts Voir le message
    L'article ne parle pas des interfaces qui pourront porter une implémentation de base ????!!!!
    Pourtant c'est une des features que je préfère !

    Exemple (codé sans passer par IDE dsl)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    interface IViewModel : INotifyPropertyChanged
    {
     void RaisePropertyChanged(string propertyName)
    {
        PropertyChanged?.invoke(propertyName);
    }
    }
    Ça c'est justement un cas où ça me paraîtrait inapproprié. D'un point de vue fonctionnel un IViewModel ne devrait pas permettre à son consommateur de lever lui-même l'événement, après tout seul le ViewModel peut dire si une de ses propriétés à réellement changé sa valeur (puisqu'il pourrait par exemple bloquer l'affectation d'une valeur invalide). Ce genre de méthode n'a ça place que dans la structure interne d'une classe et ne devrait pas être dans une interface. Si on veut factoriser ce code on le ferait dans une classe de base (éventuellement abstract) qui serait héritée par d'autres classes spécifiques. En revanche on pourrait avoir, j'imagine, une méthode GetModelVersion(), qui donnerait des informations sur le modèle de données sous-jacent, et renverrait une valeur par défaut si ce n'est pas géré par une implémentation spécifique.

    En outre il me semble que ce mécanisme devait être introduit pour permettre de faire évoluer une interface sans introduire de breaking change auprès des "implémenteurs" (qui autrement ne seraient plus compatibles avec leurs propres consommateurs). Il me semble que l'utiliser pour factoriser du code constitue un peu un détournement de l'intention de départ.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Quid d'une classe qui hérite de 2 Interfaces qui implémentent la même méthode ? On se retrouve avec le même "problème".
    ca ne change pas grand chose je pense, enfin quand tu implémentes 2 interfaces avec une méthode de même nom et même signature il fallait déjà spécifier
    ca reviendra au même je pense, enfin ce n'est pas précisé oui, car j'ai cru comprendre que ce n'était pas un override mais bien une récupération implicite, donc il faudrait pouvoir en réorienter une alors qu'aucune des 2 n'apparaitra ...

    Citation Envoyé par tatayo Voir le message
    Concernant le "range", le point qui me chagrine est que le comptage part de 0 au début de la chaine, et de 1 à la fin.
    Dans cet exemple, l'indice 1 est le second caractère, et l'indice ^1 le dernier. Pourquoi ce n'est pas ^0 ?
    il faut plus le voir comme un count - n donc count - 1 ramène bien à la fin


    Citation Envoyé par Noxen Voir le message
    Ça c'est justement un cas où ça me paraîtrait inapproprié. D'un point de vue fonctionnel un IViewModel ne devrait pas permettre à son consommateur de lever lui-même l'événement, après tout seul le ViewModel peut dire si une de ses propriétés à réellement changé sa valeur (puisqu'il pourrait par exemple bloquer l'affectation d'une valeur invalide). Ce genre de méthode n'a ça place que dans la structure interne d'une classe et ne devrait pas être dans une interface. Si on veut factoriser ce code on le ferait dans une classe de base (éventuellement abstract) qui serait héritée par d'autres classes
    l'appel à RaisePropertyChanged restera dans la classe sur chaque propriété, donc c'est bien la classe qui saura s'il faut lever l'event (au passage avec [CallerMemberName] ca évite de préciser le nom de la propriété)
    après passer par une classe type ObservableObject pour en hériter ca n'est pas toujours possible, en wpf par exemple on a souvent envie d'hériter de dependencyobject, donc avoir une interface avec du code ca amène quand même un peu de souplesse

    après libre à chacun d'utiliser ou non
    moi c'est l'object nullable que je vois pas trop les cas d'utilisations
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Microsoft dévoile la feuille de route de son service Cloud OneDrive
    Par Stéphane le calme dans le forum Cloud Computing
    Réponses: 3
    Dernier message: 12/01/2015, 15h21
  2. Microsoft dévoile la feuille de route d'Office 365 version entreprise
    Par Stéphane le calme dans le forum Microsoft Office
    Réponses: 0
    Dernier message: 20/06/2014, 20h42
  3. BizTalk Server 2010 R2 : Microsoft dévoile la feuille de route
    Par Hinault Romaric dans le forum Microsoft BizTalk Server
    Réponses: 0
    Dernier message: 09/12/2011, 12h17
  4. Réponses: 15
    Dernier message: 04/10/2010, 09h52
  5. Réponses: 0
    Dernier message: 22/04/2010, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo