J'ai le code C # suivant:
namespace ISeeOptic.BL
{
public abstract class Process
{
...
protected static void DeleteImages(List<ImagesPath> list)
{
some logic
}
...
}
protected class GetDataBL: Process
{
...
public static void DeleteImages(List<ImagesPath> list)
{
DeleteImages(list);
}
...
}
}
Au moment de la compilation, j'obtiens l'erreur suivante:
Les éléments définis dans un espace de noms ne peuvent pas être explicitement déclarés comme privés, protégés ou internes protégés
Je suis débutant en C # alors peut-être que cette question peut sembler naïve, Aucune idée de la cause de cette erreur?
Merci d'avance.
Les éléments définis dans un espace de noms peuvent être explicitement déclarés publics ou internes.
Ils ne peuvent pas être explicitement déclarés privés ou protégés (ou protégés internes) car ces modificateurs n'ont de sens que pour les membres d'une classe.
Votre protected class GetDataBL
, par exemple, n'a aucun sens, car "protected" signifie "accessible aux classes qui héritent de la classe contenant" - mais il n'y a pas de classe contenant pour GetDataBL.
private
protected
signifie qu'ils seront accessibles à cette classe ou aux classes dérivées.
Au niveau de l'espace de noms, il n'y a pas de classe dérivée, donc inutile.
Vous ne pouvez utiliser que public
ou internal
au niveau Namespace
(Je pense que vous obtiendrez en fait une erreur lors de la compilation; si vous êtes seulement voyez au moment de l'exécution, il est probable que votre code soit également compilé au moment de l'exécution, par exemple dans le cadre d'un site Web. logiquement, c’est une erreur de compilation, pas une exception.)
Le modificateur d'accès protected
(de manière lâche) rend un membre accessible à un type contenant dérivé; mais dans le cas d'un membre d'espace de nom, il y a est pas de type contenant.
De même, le domaine d'accessibilité d'un membre privé est le texte du programme contenant le type - et encore une fois, il y a est pas de type contenant.
Que tentez-vous réellement de réaliser {réaliser} _ en protégeant GetDataBL
?
C'est la portée des éléments qui cause l'erreur, comme l'explique l'erreur - et la spécification C # (section 10.5.1 de l'ECMA):
- Les types déclarés dans des unités de compilation ou des espaces de noms peuvent avoir
public
ouinternal
déclarés accessibilité et par défaut àinternal
déclarés accessibilité.- Les membres du groupe peuvent avoir l’un des cinq types d’accessibilité déclarée et la valeur par défaut
private
déclarée.- Les membres de la structure peuvent avoir
public
,internal
ouprivate
déclarés accessibilité et par défaut àprivate
accessibilité déclarée car les structures sont implicitement scellées.
Dans la classe Privé, Protégé et Protégé, accès interne Les spécificateurs ne sont pas autorisés au niveau de l'espace de noms.
Seuls les spécificateurs autorisés sont publics et internes à la classe.
Uniquement pour les classes enfants accès interne privé, protégé ou protégé Les spécificateurs sont autorisés.
Exemple de code
internal class ParentClass
{
public string test()
{
return "This is the parent class function";
}
private class BaseChildClass
{
protected string childtest()
{
return "This is the parent class function";
}
}
private class DerivedChildClass : BaseChildClass
{
private void test1()
{
string test = base.childtest();
}
}
}