正如标题所示,这两者如何区分对方?我们可以安全地说他们都一样吗?最好的情况是什么时候我们选择一个呢?我碰巧遇到它,但我并不确定。我希望有人能清除我的疑惑。提前致谢。this.GetType()。Assembly.GetName()。Version和Assembly.GetExecutingAssembly()。GetName()。Version?之间的区别是什么?
回答
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.GetExecutingAssembly()
将返回AssemblyA,因为这是包含Foo.PrintAssembly()
方法的程序集。
只有当密封包含对this.GetType()
的调用的类型时,才能确定它们指向同一个程序集。
一个告诉你类型属于的组件版本。另一个告诉你当前正在执行的程序集版本。但是你已经知道了。
我相信你可以放心地假设正在执行的程序集总是和'this'的一部分一样。至少我想不出为什么它不会。
为了清楚起见,无论您选择其中一个,都将取决于您是在查找类型的装配还是正在执行的装配。假设你的父亲和你的老板是同一个人......你是否在餐桌上称他为老板?或者你是否把他介绍给你的女朋友当老板?使用那些对读取代码的下一个人有意义的代码。
令人敬畏的解释,布兰登。非常感谢。 – woodykiddy
@woodykiddy您的欢迎,但事实证明,你应该只关注第一段和第三段:) –
不用担心。我们都学会了。 :) – woodykiddy
- 1. ractivejs中的“runtime version”和“version”有什么区别?
- 2. `java -version`和`java -showversion`有什么区别?
- 3. 各种MSBuild版本属性(如Version,VersionPrefix和VersionSuffix)之间的区别是什么?
- 4. Thread.currentThread()。getName()和getName()之间有什么区别?
- 5. Base SDK与Deployment Target或Deployment OS Version之间的真正区别是什么?
- 6. 为什么“freebsd-version”和“freebsd-version -k”的输出不同?
- 7. “Thread.currentThread()。getName”和“this.getName”有什么区别?
- 8. ++和:haskell之间的区别是什么?
- 9. $(())和expr之间的区别是什么?
- 10. $(...)和`...`之间的区别是什么
- 11. [undefined]和[,]之间的区别是什么?
- 12. macosx-version-min暗示什么?
- 13. 区别:%% a和%variable%变量之间的区别是什么?
- 14. Swift:什么是.swift-version文件?
- 15. 什么是<?xml version =“1.0”?>?
- 16. 为什么.freeze和.dup SomeGem :: VERSION?
- 17. 什么意思<version>#{site.components ['arquillian-core']。latest_version}</version> in Maven?
- 18. MVC和MVVM之间的区别和相似之处是什么?
- 19. TVF/UDF之间的区别是什么
- 20. [EmailPasswordAuthProvider,EmailAuthProvider]之间的区别是什么
- 21. Hibernate @Version和DTO的
- 22. dpm()和dsm()之间有什么区别?
- 23. @dynamic和@synthesize之间有什么区别?
- 24. vbNullString和“”之间有什么区别吗?
- 25. * zoom和zoom之间有什么区别?
- 26. String.Concat,string.format和+之间有什么区别?
- 27. StaticLayout和DynamicLayout之间有什么区别
- 28. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之间有什么区别?
- 29. :: after和after之间有什么区别?
- 30. %.02f和%.2f之间有什么区别?
你确定这个逻辑吗? –
@Brandon:是的,我是。 :) – Sven
在那种情况下+1! –