我有一个小的控制台应用程序,我只是为了学习新的东西而修补。
在下面的代码中,在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 { }
}
}
答案 0 :(得分:5)
因为它们嵌套在Test
内。
From the documentation:如果Type被声明为public且不是嵌套类型,则为true;否则,错误。
正如@ Jeb的答案和文档建议的那样,typeof(PublicClass)
对IsNestedPublic属性的值应为true
答案 1 :(得分:3)
在集会之外不公开...... IsNestedPublic应该是真的,但是......