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);
}
}
}
}
据我了解,这段代码在i
是Packet
类的情况下执行了for-each函数,因此我不理解代码typeof(Packet).IsAssignableFrom(i)
和{{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
类型的程序集中定义的所有类型。