Niveau de Protection d'un struct domaine au sein d'une classe

Je suis assez nouveau à la programmation en C#, donc c'est probablement une question de débutant.

- Je obtenir un "'A. Test.Qu'.Échoue "est inaccessible en raison de son niveau de protection" erreur sur l'extrait de code suivant et je n'arrive pas à comprendre la raison.

namespace A
{
    class Test
    {
        public void Demo()
        {
            That[] it = new That[42];
            it[0].fails = 21;
        }

        public struct That
        {
            int fails;
        }
    }
}

Venant de la programmation en C++, et ayant lu que les règles de protection sont presque les mêmes, car il n'y a qu'une seule classe je m'attends à ce que cela fonctionne même si le That struct et la Demo méthode ont été private.

Que la note de côté, un lien vers une page résumant champ d'application et les règles de protection vers le programmeur C++ serait grandement apprécié.

A.Test.That.fails... intelligent. +1
Voir Cody réponse; il y a une grande différence entre les structures et les classes en C#; à peine sont-ils liés, en fait. La plupart du temps que les gens utilisent un struct en C#, il est incorrect. Assurez-vous que vous utilisez pour les bonnes raisons. "Parce que c'est un objet simple" n'est pas une raison.
va "parce que je veux juste un rapide tableau de scalaires paires de" faire comme une excuse?
Oui, je dirais. Pas nécessairement parce que c'est simple ou rapide, mais parce que vous voulez le type de la valeur sémantique de ces scalaire paires. Ils doivent travailler comme un int, non pas comme un objet. Il est tout à fait logique qu'ils soient immuables. J'ai choisi une structure pour que, trop.
Sur un tangentielle remarque: Dans le cas que vous n'avez pas veux votre fonctionnement interne du public, mais ont besoin de leur public, de toute façon, InternalsVisibleTo vous permet de faire une classe interne visible à l'externe spécifique de l'assemblée. C'est surtout utile pour les tests unitaires.

OriginalL'auteur Julien Guertault | 2011-03-28