为什么在引发FormClosed事件后表单仍然可见?如何检测表单何时实际关闭?
有趣的是这一点
_form2.VisibleChanged += (s, a) =>
{
if (_form2.Visible == false)
MessageBox.Show("TEXT");
};
Run Code Online (Sandbox Code Playgroud)
导致相同的结果.
var ar = new int[500000000];
var sw = new Stopwatch();
sw.Start();
var length = ar.Length;
for (var i = 0; i < length; i++)
{
if (ar[i] == 0);
}
sw.Stop();
Run Code Online (Sandbox Code Playgroud)
sw.ElapsedMilliseconds:~2930ms
var ar = new int[500000000];
var sw = new Stopwatch();
sw.Start();
for (var i = 0; i < ar.Length; i++)
{
if (ar[i] == 0);
}
sw.Stop();
Run Code Online (Sandbox Code Playgroud)
sw.ElapsedMilliseconds:~3520ms
Win8x64,VS12,.NET4.5,发布版本,"优化代码".
据我所知,第二种方法应该更快,因为数组边界检查优化.我错过了什么吗?
c# arrays for-loop compiler-optimization bounds-check-elimination
据我所知,每个变量都知道它的运行时类型.
这是一个例子:
void Main()
{
C c = new C();
c.M();
I i = (I)c;
i.M();
}
public interface I
{
void M();
}
public class C : I
{
void I.M()
{
Console.WriteLine("I.M");
}
public void M()
{
Console.WriteLine("M");
}
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,i
仍然知道它的类型是C
.那么,i
决定使用I.M
而不是M
?的机制是什么?
对于此代码:
class Program
{
static void Main()
{
Console.WriteLine(new MyStruct().ToString());
}
struct MyStruct { }
}
Run Code Online (Sandbox Code Playgroud)
C#编译器生成constrained callvirt
IL代码.
这篇文章说:
例如,如果值类型V覆盖Object.ToString()方法,则会发出调用V.ToString()指令; 如果没有,则发出一个box指令和一个callvirt Object.ToString()指令.如果稍后添加覆盖,则可能出现版本控制问题<...>.
所以,我的问题是:如果编译器生成box
代码而不是约束调用,为什么在这种情况下会出现问题?
如何根据整个ListBox和可见的ScrollViewer区域获取ListBoxItem(它的左上角)的绝对(X,Y)位置?看起来WP7下没有TranslatePoint().
我正在尝试同时下载多个文件。如何确定并行下载的最佳文件数量?
通过"反射"我的意思是使用System.Reflection命名空间.
MSDN谈到PrivateObject类:"允许测试代码......".我比System.Reflection更喜欢PrivateObject语法,所以我想知道是否有一个真正的理由不在生产代码中使用它,并仅保留它用于单元测试?
c# ×6
arrays ×1
boxing ×1
cil ×1
for-loop ×1
listbox ×1
listboxitem ×1
modal-dialog ×1
reflection ×1
webclient ×1
winforms ×1