为什么System.Type.IsPublic返回false?

时间:2012-02-24 18:41:56

标签: c# reflection

我有一个小的控制台应用程序,我只是为了学习新的东西而修补。

在下面的代码中,在Console.WirteLine()中,如果我测试t.IsAbstractt.IsSealed,我的输出分别为AbstractClass trueSealedClass true。所有其他人都按照我的预期返回false

但是,如果我测试t.IsPublic,则包括PublicClassPublicInterface在内的所有内容都会返回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 个答案:

答案 0 :(得分:5)

因为它们嵌套在Test内。

From the documentation:如果Type被声明为public且不是嵌套类型,则为true;否则,错误。

正如@ Jeb的答案和文档建议的那样,typeof(PublicClass)IsNestedPublic属性的值应为true

答案 1 :(得分:3)

在集会之外不公开...... IsNestedPublic应该是真的,但是......