Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 什么';这个.GetType().Assembly.GetName().Version和Assembly.GetExecutionGassembly().GetName().Version之间的区别是什么?_C#_.net - Fatal编程技术网

C# 什么';这个.GetType().Assembly.GetName().Version和Assembly.GetExecutionGassembly().GetName().Version之间的区别是什么?

C# 什么';这个.GetType().Assembly.GetName().Version和Assembly.GetExecutionGassembly().GetName().Version之间的区别是什么?,c#,.net,C#,.net,正如标题所暗示的,这两者如何区分?我们可以安全地说它们都是一样的吗?什么时候是我们选择一个而不是另一个的最佳情况?我只是碰巧遇到了它,我不是很确定。我希望有人能消除我的疑虑。提前谢谢 一个命令告诉您该类型所属程序集的版本。另一个告诉您当前正在执行的程序集的版本。但你已经知道了 我相信您可以安全地假设执行程序集始终与“this”所属的程序集相同。至少我想不出为什么会这样 为了清楚起见,您选择一个还是另一个取决于您是在查找类型的程序集,还是正在执行的程序集。假设你爸爸和你老板是同一个人。。。你在餐桌

正如标题所暗示的,这两者如何区分?我们可以安全地说它们都是一样的吗?什么时候是我们选择一个而不是另一个的最佳情况?我只是碰巧遇到了它,我不是很确定。我希望有人能消除我的疑虑。提前谢谢

一个命令告诉您该类型所属程序集的版本。另一个告诉您当前正在执行的程序集的版本。但你已经知道了

我相信您可以安全地假设执行程序集始终与“this”所属的程序集相同。至少我想不出为什么会这样

为了清楚起见,您选择一个还是另一个取决于您是在查找类型的程序集,还是正在执行的程序集。假设你爸爸和你老板是同一个人。。。你在餐桌上称他为你的老板吗?或者你把他介绍给你的女朋友作为你的老板?使用对下一个阅读您的代码的人有意义的实例。

this.GetType()
获取当前实例的多态类型,它可能实际上是您调用的类的子类
this.GetType()
,并且该子类可能位于不同的程序集中

考虑以下几点:

AssemblyA.dll:

public class Foo
{
    public void PrintAssembly()
    {
        Console.WriteLine(this.GetType().Assembly.GetName());
        Console.WriteLine(Assembly.GetExecutingAssembly().GetName());
    }
}
AssemblyB.dll:

public class Bar : Foo
{
}
现在,如果运行以下代码:

Bar b = new Bar();
b.PrintAssembly();
确定总成的两种方法的结果将不相同
this.GetType().Assembly
将返回AssemblyB(因为
this
的实际类型是
Bar
),而
Assembly.getExecutionGassembly()
将返回AssemblyA,因为该程序集包含
Foo.PrintAssembly()
方法


只有当包含对
this.GetType()
的调用的类型被密封时,您才能确定它们引用了相同的程序集。

您确定这个逻辑吗?哇,polymophism,这更令人兴奋。谢谢你的解释。你们真是太棒了!!真棒的解释,布兰登。非常感谢。@woodykiddy欢迎你,但事实证明你应该只注意第一段和第三段:)@Brandon Moore那么为什么不编辑你的答案并删除误导性的部分呢?