BCL中的许多方法都标有 [MethodImpl(MethodImplOptions.InternalCall)]
属性.这表明 "方法是在公共语言运行时本身内实现的".
以这种方式设计框架的重点是指定了运行时将被强制实现的显式CIL指令?最终,该属性正在为运行时创建合同义务,但在某种程度上,我觉得这种方式令人困惑,而且不是很明显.
例如,Math.Pow
本来可以用这种方式编写(请原谅我非正式的C#+ IL和IL本身,如果它不好的话;这只是一个解释我的观点的样本):
public static double Pow(double x, double y)
{
ldarg.0
ldarg.1
pow // Dedicated CIL instruction
ret
}
Run Code Online (Sandbox Code Playgroud)
而不是当前的方式:
[MethodImpl(MethodImplOptions.InternalCall)]
public static double Pow(double x, double y);
Run Code Online (Sandbox Code Playgroud)
为什么MethodImplOptions.InternalCall
存在?
此代码段中变量“元素”的类型是什么?我以为它是一个数字(ID 或其他东西),但现在,我不知道了。代码有效,但我不明白为什么可以在 for 循环中使用 var 元素,就像数组一样。对此有什么解释吗?
<script type="text/javascript">
function showAtrributes() {
var element = document.getElementById("videos");
var listAttributes = "";
for(var attribute in element) {
var valueOfAtrrib = element.getAttribute(attribute);
listAttributes = listAttributes + attribute + ": " + valueOfAttrib + "\n";
}
alert(listAttributes);
}
</script>
Run Code Online (Sandbox Code Playgroud)