这是Microsoft C#编译器中的错误,还是语法服务于我不知道的目的?
class P1
{
class P2 : P1
{
class P3 : P2
{
void Foo()
{
P3 p3 = this as P2.P3;
P2 p2 = this as P3.P2; // ?!?
}
};
};
};
Run Code Online (Sandbox Code Playgroud)
编辑:我应该提一下,它在VS2010中编译得很好.
我已阅读文档,Marshal.GetIUnknownForObject并说:
Marshal.Release完成指针后,始终使用减少引用计数.
我写了,我通过.NET中使用COM对象的测试解决方案,我看到与工作时的包装,以我的COM对象既不Marshal.GetIUnknownForObject也不Marshal.Release引起AddRef或Release我的COM对象的方法被调用.
那是怎么回事?
我正在查看版本4.5.0-preview1-26216-02Vector<T>的System.Numerics.Vectors命名空间.MSDN文档说:
Vector<T>是一个不可变的结构,表示指定数字类型的单个向量.实例的计数Vector<T>是固定的,但其上限取决于CPU寄存器.
https://docs.microsoft.com/en-us/dotnet/api/system.numerics.vector-1(强调添加)
即使忽略误导的措辞" 计算向量的数量 [sic.] ",这句话似乎还不清楚,因为它暗示不同的Vector<T>实例可能有不同的 - 尽管"固定"到某些CPU限制 - "计数"(再次,究竟是什么'所谓的'计数'?)这里没有提到实际的Count属性 - 或者实际上在介绍页面的任何地方都没有提到.
现在通常情况下,我认为"只读"或"不可变"在描述实例的属性或字段时比传统上使用"固定",但在这种情况下,事实证明该Vector<T>.Count属性虽然是只读的,但也是静态的,因此与任何Vector<T> 实例无关.相反,它的值仅根据泛型类型参数而变化T(然后可能来自机器到机器,如图所示):
bool hw = Vector.IsHardwareAccelerated; // --> true
var c = (Vector<sbyte>.Count, Vector<short>.Count, Vector<int>.Count, Vector<long>.Count);
Debug.WriteLine(c); // --> (16, 8, 4, 2)
Run Code Online (Sandbox Code Playgroud)
哦.
它基本上System.Int128是伪装的吗?是吗?我的问题是:
SIMD,但我认为这个库将允许使用的多少不是仅仅128位的更广泛的硬件加速的数据类型.我的HPSG解析引擎通常执行5,000+位的密集位计算向量.再假设我没有错过这一点,为什么不把它称为System.Int128/ …
这是一个简单的c语句:
uint32_t x = 0x04000000;
Run Code Online (Sandbox Code Playgroud)
在我的小端机器上,我假设 x 等于 4。但实际上它是 67108864。
所以一定有一些非常基本的东西我不明白。您能帮忙解释一下吗?