Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';组装';在这个代码里有什么?_C#_.net - Fatal编程技术网

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())