C# 什么';这个.GetType().Assembly.GetName().Version和Assembly.GetExecutionGassembly().GetName().Version之间的区别是什么?
正如标题所暗示的,这两者如何区分?我们可以安全地说它们都是一样的吗?什么时候是我们选择一个而不是另一个的最佳情况?我只是碰巧遇到了它,我不是很确定。我希望有人能消除我的疑虑。提前谢谢 一个命令告诉您该类型所属程序集的版本。另一个告诉您当前正在执行的程序集的版本。但你已经知道了 我相信您可以安全地假设执行程序集始终与“this”所属的程序集相同。至少我想不出为什么会这样 为了清楚起见,您选择一个还是另一个取决于您是在查找类型的程序集,还是正在执行的程序集。假设你爸爸和你老板是同一个人。。。你在餐桌上称他为你的老板吗?或者你把他介绍给你的女朋友作为你的老板?使用对下一个阅读您的代码的人有意义的实例。C# 什么';这个.GetType().Assembly.GetName().Version和Assembly.GetExecutionGassembly().GetName().Version之间的区别是什么?,c#,.net,C#,.net,正如标题所暗示的,这两者如何区分?我们可以安全地说它们都是一样的吗?什么时候是我们选择一个而不是另一个的最佳情况?我只是碰巧遇到了它,我不是很确定。我希望有人能消除我的疑虑。提前谢谢 一个命令告诉您该类型所属程序集的版本。另一个告诉您当前正在执行的程序集的版本。但你已经知道了 我相信您可以安全地假设执行程序集始终与“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那么为什么不编辑你的答案并删除误导性的部分呢?