C# ';组装';在这个代码里有什么?
据我所知,这段代码对C# ';组装';在这个代码里有什么?,c#,.net,C#,.net,据我所知,这段代码对I是数据包类的每个函数都做了一个分析,然后我不理解(数据包)的类型。IsAssignableFrom(I)和(数据包)Activator.CreateInstance(I) 有人能给我解释一下这些功能吗?直接回答你的问题;如果我们将其分解: foreach (Type i in typeof(Packet).Assembly.GetTypes()) { if (typeof(Packet).IsAssignableFrom(i) && !i.IsAbs
I
是数据包
类的每个函数都做了一个分析,然后我不理解(数据包)的类型。IsAssignableFrom(I)和(数据包)Activator.CreateInstance(I)
有人能给我解释一下这些功能吗?直接回答你的问题;如果我们将其分解:
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);
}
}
}
}
首先是:
foreach (Type i in typeof(Packet).Assembly.GetTypes())
此对象,表示有关类型数据包的各种元数据
typeof(Packet)
它包含数据包
类型/类。这里的“Assembly”与DLL大致同义,尽管它可以包含EXE文件(和其他文件)。在VisualStudio上下文中,如果您有多个项目,则每个项目通常编译到单独的程序集中
typeof(Packet).Assembly
这是在我们刚才引用的程序集中定义的
我们现在可以看到你原来的
typeof(Packet).Assembly.GetTypes()
…将迭代包含数据包的程序集中定义的所有类型。欢迎使用堆栈溢出。好的,我们现在知道您不了解哪些部分了-您是否查看了Type.IsAssignableFrom
和Activator.CreateInstance
的文档?如果是,您不清楚该文档的哪些部分?否i
不是Packet
(尽管可以)i
是从Pocket
所在的程序集中检索到的任何类型。但是,如果从该类型派生的数据包
,则代码将继续Activator
只是一个对象,它可以从类的声明中创建类的实例
foreach (Type i in typeof(Packet).Assembly.GetTypes())