相关疑难解决方法(0)

为什么IsNan是Double类的静态方法而不是实例属性?

问题在标题中,为什么:

return double.IsNaN(0.6d) && double.IsNaN(x);
Run Code Online (Sandbox Code Playgroud)

代替

return (0.6d).IsNaN && x.IsNaN;
Run Code Online (Sandbox Code Playgroud)

我问,因为在实现具有与NaN相同含义的特殊值的自定义结构时,我倾向于选择第二种结构.

此外,属性的性能通常更好,因为它避免复制堆栈上的结构以调用IsNaN静态方法(并且因为我的属性不是虚拟的,所以没有自动装箱的风险).当然,对于内置类型来说这不是一个真正的问题,因为JIT可以很容易地优化它.

我现在最好的猜测是,因为你不能在double类中同时拥有属性和静态方法,所以他们更喜欢java启发的语法.(事实上​​你可以同时定义一个get_IsNaN属性getter,另一个定义一个IsNaN静态方法,但它会混淆任何支持属性语法的.Net语言)

c# oop

12
推荐指数
2
解决办法
1854
查看次数

为什么dotnet的char.IsLower()是静态方法?

这似乎与每个设计指南背道而驰.接受类型T的单个参数的静态方法通常应该只是一个成员方法.

这真是太棒了我实际上不得不发布一个StackOverflow问题来理解IsUpper是否存在(因为它没有出现在自动完成中)

编辑

我理解我之前的陈述需要一点解释.良好设计的一个例子是String.ToLower().它不是原型为静态void ToLower(String foo),而是一个成员方法.很明显(对我来说)同样应该适用于char.IsLower().

.net static char

6
推荐指数
1
解决办法
753
查看次数

标签 统计

.net ×1

c# ×1

char ×1

oop ×1

static ×1