如果JavaScript的Number和C#的double指定相同(IEEE 754),为什么具有许多有效数字的数字处理不同?
var x = (long)1234123412341234123.0; // 1234123412341234176   - C#
var x =       1234123412341234123.0; // 1234123412341234200   - JavaScript
Run Code Online (Sandbox Code Playgroud)
我并不关心IEEE 754不能代表数字1234123412341234123这一事实.我担心这两个实现对于无法用完全精度表示的数字不起作用.
这可能是因为IEEE 754未指定,一个或两个实现有故障或者它们实现了IEEE 754的不同变体.
此问题与C#中的浮点输出格式问题无关.我正在输出64位整数.考虑以下:
            long x = 1234123412341234123;
            Console.WriteLine(x); // Prints 1234123412341234123
            double y = 1234123412341234123;
            x = Convert.ToInt64(y);
            Console.WriteLine(x); // Prints 1234123412341234176
相同的变量打印不同的字符串,因为值不同.
所有具体类都必须实现抽象函数.
有时您希望强制所有派生类实现抽象函数,甚至是具体类的派生.
class Base { protected abstract Base Clone(); }
class Concrete : Base { protected override Base Clone(){...}; }
class Custom : Concrete {}
Run Code Online (Sandbox Code Playgroud)
我希望编译器告诉程序员该类Custom需要实现Clone().有办法吗?
禁止私有虚拟功能的原因是什么?
空私有虚拟可以启用低摩擦纯定制点.
抽象功能具有高摩擦力,受保护的虚拟引起混乱和噪音.
进一步说明:
非虚拟接口模式将接口责任(公共)与提供定制点(虚拟)分开.
在课堂设计中使用NVI时,我必须保护我的虚拟机.可以选择将它们设为私有使得意图更加强大.这意味着后代只能提供定制,并且不会混淆是否调用基数,事实上它是被禁止的.一定有充分的理由明确禁止它(诊断:"私有方法不能是多态的").