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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft livre un aperçu des nouveautés de C# 8.0
Et envisage de commencer à livrer cette version dans les préversions de Visual Studio 2019

Le , par Michael Guilloux

1.5KPARTAGES

15  0 
Vous avez lu gratuitement 504 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de François DORIN
Expert éminent sénior https://www.developpez.com
Le 15/11/2018 à 15:31
Citation Envoyé par ijk-ref Voir le message
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", "t'es un mauvais programmeur pour que ça te dérange"
Je ne dis pas que ce n'est pas une erreur. Je dis que corriger les choses maintenant au lieu de les avoir prévu dès le début va provoquer des incompatibilités. C# se retrouve donc a être comme PHP ou Python, où une montée de version majeure induit un cassage de la compatibilité. Et que ça, c'est aussi une très grosse erreur (peut être même plus que l'erreur que l'on souhaite corriger). Jusqu'à présent, l'ajout de nouvelles fonctionnalités s'était toujours fait de manière compatible.
3  0 
Avatar de tatayo
Expert éminent sénior https://www.developpez.com
Le 14/11/2018 à 17:37
2  0 
Avatar de Noxen
Membre chevronné https://www.developpez.com
Le 14/11/2018 à 17:43
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
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.
1  0 
Avatar de CS FS
Membre averti https://www.developpez.com
Le 14/11/2018 à 14:28
Que va-t-il advenir de string.IsNullOrWhiteSpace() ?
Oui, je me pose des questions existentielles.
0  0 
Avatar de stailer
Membre chevronné https://www.developpez.com
Le 14/11/2018 à 16:59
Que va-t-il advenir de string.IsNullOrWhiteSpace() ?
Je pense que c'est toujours utile car comme son nom l'indique ça vérifie aussi si ta chaîne n'est pas constituée que d'espaces blancs
0  0 
Avatar de J@ckHerror
Membre expérimenté https://www.developpez.com
Le 14/11/2018 à 17:18
Citation Envoyé par stailer Voir le message
Je pense que c'est toujours utile car comme son nom l'indique ça vérifie aussi si ta chaîne n'est pas constituée que d'espaces blancs
Comme CS_FS je me pose des questions existancielles !
Ok pour WhiteSpace ! Mais quid de IsNullOrEmpty() ?

Sinon je valide les évolutions mais je suis pas fan d'omettre les types, je minimise l'utilisation des var , quasis que pour des tests ponctuels, je trouve ça inutile et vraiment pas pratique lors de la reprise de code ou lors de débogage.

J@ck.
0  0 
Avatar de Kikuts
Membre éprouvé https://www.developpez.com
Le 14/11/2018 à 17:21
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
1
2
3
4
5
6
7
interface IViewModel : INotifyPropertyChanged
{
 void RaisePropertyChanged(string propertyName)
{
    PropertyChanged?.invoke(propertyName);
}
}
0  0 
Avatar de Iradrille
Expert confirmé https://www.developpez.com
Le 14/11/2018 à 20:27
0  0 
Avatar de miaous
Membre averti https://www.developpez.com
Le 14/11/2018 à 20:37
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#
0  0 
Avatar de Pol63
Expert éminent sénior https://www.developpez.com
Le 14/11/2018 à 20:43
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
0  0