这段代码中的“程序集”有什么目的?

时间:2018-12-05 16:38:47

标签: c# .net

foreach (Type i in typeof(Packet).Assembly.GetTypes())
{
    if (typeof(Packet).IsAssignableFrom(i) && !i.IsAbstract)
    {
        Packet Packet = (Packet)Activator.CreateInstance(i);
        if (!(Packet is ServerPacket))
        {
            if (!Packets.ContainsKey(Packet.PacketID))
            {
                Packets.Add(Packet.PacketID, Packet);
            }
        }
    }
}

据我了解,这段代码在iPacket类的情况下执行了for-each函数,因此我不理解代码typeof(Packet).IsAssignableFrom(i)和{{1} }

有人可以向我解释这些功能吗?

1 个答案:

答案 0 :(得分:1)

直接回答您的问题;如果我们将其分解:

foreach (Type i in typeof(Packet).Assembly.GetTypes())

开始于:

                   typeof(Packet)

returns a Type对象,表示有关类型Packet的各种元数据。

                   typeof(Packet).Assembly

returns the assembly包含Packet类型/类。尽管此处的“程序集”可以包含EXE文件(及其他文件),但它与DLL大致相同。在Visual Studio上下文中,如果您有多个项目,则通常将每个项目编译到一个单独的程序集中。

                   typeof(Packet).Assembly.GetTypes()

returns all the types在我们刚刚引用的程序集中定义。

我们现在可以看到您的原始...

foreach (Type i in typeof(Packet).Assembly.GetTypes())

...将迭代包含Packet类型的程序集中定义的所有类型。