Dans le cadre de la Roslyn sur GitHub, il y a une page appelée État d'avancement de la mise en œuvre des fonctionnalités linguistiques avec des fonctionnalités linguistiques prévues pour C# et VB.
L'une des caractéristiques que je n'arrivais pas à comprendre était la suivante private protected
modificateur d'accès :
private protected string GetId() { … }
Il existe également une page de Notes sur la conception du langage C# qui explique de nombreuses nouvelles fonctionnalités, mais pas celle-ci.
Eric Lippert a déclaré dans un commentaire :
Votre erreur est de considérer les modificateurs comme des restrictions croissantes. En réalité, les modificateurs diminuent toujours les restrictions. Rappelez-vous que les choses sont "privées" par défaut ; ce n'est qu'en ajoutant des modificateurs que vous les rendez moins restrictives.
Quelle est la signification de private protected
? Quand puis-je l'utiliser ?
2 votes
Notez qu'il existe des informations à ce sujet dans la rubrique Notes sur la conception du langage VB .
3 votes
Il s'agit d'une correspondance avec MethodAttributes.FamANDAssem. C# a un mappage étrange de interne il utilise (Private|FamANDAssem). Et protégé à l'intérieur correspond à (Privé|Famille). Les attributs du CLR sont bizarres.
22 votes
La fonction proposée rendra mon commentaire incorrect.
0 votes
L'équipe de conception de C# a publié un enquête avec proposition de syntaxe alternative pour cette fonction. Certaines d'entre elles sont intéressantes, comme
protected & internal
,assembly protected
oproternal
(J'espère que certains d'entre eux sont des blagues). Il y a aussi le Fil de discussion avec quelques idées intéressantes.1 votes
La fonctionnalité est maintenant marquée comme retirée dans l'état de mise en œuvre de la fonctionnalité linguistique ! Personnellement, j'aime l'idée de ce niveau d'accès et je pense qu'il s'agit d'une fonctionnalité utile. Je veux utiliser le protected pour garder mon code conforme à la conception de la classe, mais je ne veux pas que d'autres écrivent des sous-classes bidouillées qui ont accès à ces membres. IMO la meilleure solution serait que nous puissions écrire
protected | internal
yprotected & internal