Почему System.Type.IsPublic возвращается как ложное? - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть небольшое консольное приложение, с которым я работаю, просто чтобы узнать что-то новое.

В приведенном ниже коде, в Console.WirteLine(), если я тестирую t.IsAbstract или t.IsSealed, мойвывод AbstractClass true или SealedClass true соответственно.Все остальные возвращают false, как я ожидаю.

Однако, если я проверю t.IsPublic, все, включая PublicClass и PublicInterface, возвращает false. Почему это?

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 { }
    }
}

Ответы [ 2 ]

5 голосов
/ 24 февраля 2012

Поскольку они вложены в Test.

Начиная с в документации : true, если тип объявлен как public, а не является вложенным типом ;в противном случае - false.

Как показывают ответы @ Jeb и документы, typeof(PublicClass) должно иметь значение true для свойства IsNestedPublic

3 голосов
/ 24 февраля 2012

Это не публично вне сборки ... IsNestedPublic должно быть правда, хотя ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...