2012-02-24 5 views
3

J'ai une petite application de console que je bricoler juste pour apprendre quelque chose de nouveau.Pourquoi System.Type.IsPublic renvoie-t-il la valeur false?

Dans le code ci-dessous, en Console.WirteLine(), si je test t.IsAbstract ou t.IsSealed, ma sortie est AbstractClass true ou SealedClass true respectivement. Tous les autres renvoient false comme je l'espère.

Cependant, si je teste t.IsPublic, tout, y compris les deux PublicClass et PublicInterface renvoient false. Pourquoi est-ce?

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Reflection; 

namespace ConsoleApplication1 
{ 
    class Test 
    { 
     static void Main(string[] args) 
     {  
      Assembly assembly = Assembly.GetExecutingAssembly(); 
      Type[] assemblyTypes = assembly.GetTypes(); 
      foreach (Type t in assemblyTypes) 
       Console.WriteLine(t.Name + " " + t.IsPublic); 
      Console.ReadKey(); 
     } 

     private class PrivateClass { } 

     public class PublicClass { } 

     protected class ProtectedClass { } 

     sealed class SealedClass { } 

     abstract class AbstractClass { } 

     interface myInterface { } 

     public interface PublicInterface { } 
    } 
} 

Répondre

5

Parce qu'ils sont imbriquées à l'intérieur de Test.

De the documentation: vrai si le type est déclaré public et n'est pas un type imbriqué; sinon, faux.

Comme @ la réponse de Jeb et la documentation suggèrent, typeof(PublicClass) devrait avoir une valeur true pour la propriété IsNestedPublic

+0

+1 ma l'analyse était erronée, la réponse de Chris est correcte – JaredPar

3

Ce n'est pas public en dehors de l'ensemble ... IsNestedPublic doit être vrai si ..

Questions connexes