web-dev-qa-db-fra.com

Concept de cours privé en C #

Les classes privées peuvent-elles exister en C #, autres que les classes internes?

37
Vinod Bhatt

Tout simplement NON. Rien sauf si c'est dans une classe imbriquée

  • Les classes et les structures qui ne sont pas imbriquées dans d'autres classes ou structures peuvent être soit publiques ou internes . Un type déclaré public est accessible par tout autre type. Un type déclaré comme interne n'est accessible que par des types au sein du même assembly. Les classes et les structures sont déclarées comme internes par défaut sauf si le mot-clé public est ajouté à la définition de classe.

  • Les définitions de classe ou de structure peuvent ajouter le mot-clé interne pour rendre leur niveau d'accès explicite. Les modificateurs d'accès n'affectent pas la classe ou la structure elle-même - elle a toujours accès à elle-même et à tous ses propres membres.

  • Les membres de structure, y compris les classes et les structures imbriquées, peuvent être déclarés publics, internes ou privés. Les membres de classe, y compris les classes et structures imbriquées, peuvent être publics, protégés internes, protégés, internes ou privés. Le niveau d'accès pour les membres de classe et les membres de structure, y compris les classes et structures imbriquées, est privé par défaut. Les types imbriqués privés ne sont pas accessibles depuis l'extérieur du type conteneur.

  • Les classes dérivées ne peuvent pas avoir une plus grande accessibilité que leurs types de base. En d'autres termes, vous ne pouvez pas avoir une classe publique B qui dérive d'une classe interne A. Si cela était autorisé, cela aurait pour effet de rendre A public, car tous les membres protégés ou internes de A sont accessibles à partir de la classe dérivée.


    Vous pouvez permettre à d'autres assemblys spécifiques d'accéder à vos types internes en utilisant InternalsVisibleToAttribute .
43
Shekhar_Pro

Non, il n'y en a pas. Vous ne pouvez pas avoir de classe privée à moins qu'elle ne soit imbriquée.

13
Darin Dimitrov

Dans quel autre scénario que pour une classe interne, aimeriez-vous avoir une classe "privée"?

Vous pouvez utiliser le modificateur internal pour créer une classe qui n'est visible que dans l'assembly actuel.

// the class below is only visible inside the Assembly in where it was declared
internal class MyClass
{
}
2
Frederik Gheysels

Quelle serait la portée d'une telle classe?

2
Patman

Nous pouvons déclarer une classe comme privée dans une autre classe. veuillez trouver le code ci-dessous pour savoir comment procéder:

 public class Class1
  {
    temp _temp ;
    public Class1()
    {
      _temp = new temp();   
    }    

    public void SetTempClass(string p_str, int p_Int)
    {
      _temp.setVar(p_str, p_Int);
    }

    public string GetTempClassStr()
    {
      return _temp.GetStr();
    }

    public int GetTempClassInt()
    {
      return _temp.GetInt();
    }

    private class temp
    {
      string str;
      int i;

      public void setVar(string p_str, int p_int)
      {
        str = p_str;
        i = p_int;
      }

      public string GetStr()
      {
        return str;
      }

      public int GetInt()
      {
        return i;
      }
    }
  }
0
SPARTAN