![](/img/trans.png)
[英]Does C#/VB.NET using statement actually do anything with classes that do not implement IDisposable
[英]When using abstract classes in C#, does AgressiveInlining do anything, and where should it be placed?
假设我有一个抽象类和一个实现它的类。
public abstract class BaseClass
{
public void Outer()
{
for (int i = 0; i < 1000000; i++)
{
Inner();
}
}
protected abstract void Inner();
}
public class MyClass : BaseClass
{
protected override void Inner()
{
// do stuff
}
}
由于Outer()
这么多地调用Inner()
且几乎没有做其他事情,因此我希望Inner()
使用[MethodImpl(MethodImplOptions.AggressiveInlining)]
。
public abstract class BaseClass
{
public void Outer() // ...
[MethodImpl(MethodImplOptions.AggressiveInlining)]
protected abstract void Inner();
}
public class MyClass : BaseClass
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
protected override void Inner()
{
// do stuff
}
}
此属性是否在BaseClass
, MyClass
或两者中都存在,或者在这种情况下该属性根本不起作用?
根据Hans的评论,由于抽象类和虚拟调用的性质,不能内联抽象成员。
编辑 :根据下面的Ben的评论,这并不是所有编译器都正确,但JIT确实如此(这恰好是我的特定问题的上下文)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.