.net NET:如果线程类没有被密封,它怎么会被滥用呢?

.net NET:如果线程类没有被密封,它怎么会被滥用呢?,.net,multithreading,security,.net,Multithreading,Security,我试图理解为什么System.Threading.Thread类是密封的 我的猜测是安全性-有几种框架方法使用线程参数,如果线程未密封,则可能会被提供派生的恶意类型。但我想不出这种类型的人能做什么真正的恶意的事情 你能想出一些例子吗?我想,如果有人的派生线程类覆盖像volatireRead和volatireWrite这样的东西,人们可以想象这些东西在整个.NET运行时都会被使用,它们可能会造成一些损害 也可能不是出于安全原因。这可能是因为线程对于许多程序的运行是必不可少的,因此错误地实现线程会给

我试图理解为什么
System.Threading.Thread
类是密封的

我的猜测是安全性-有几种框架方法使用
线程
参数,如果
线程
未密封,则可能会被提供派生的恶意类型。但我想不出这种类型的人能做什么真正的恶意的事情


你能想出一些例子吗?

我想,如果有人的派生线程类覆盖像volatireRead和volatireWrite这样的东西,人们可以想象这些东西在整个.NET运行时都会被使用,它们可能会造成一些损害

也可能不是出于安全原因。这可能是因为线程对于许多程序的运行是必不可少的,因此错误地实现线程会给运行时的稳定性带来很高的成本


编辑:在对密封类调用虚拟方法时,编译器会发出callvirt,这可能对性能没有好处。JIT编译器可能会这样做,但我没有任何证据。

CLR对某些BCL类非常熟悉,并且取决于它们的布局。线程就是其中之一。AFAIK.net不会将对密封类上的虚拟方法的调用转换为非虚拟调用。已编辑。你说得对:编译器发出callvirt。也许我在考虑Java的最终类或其他东西……这不是关于C#编译器发出callvirt的问题,而是关于抖动太蠢而无法优化它的问题。