这似乎违背了每一个设计准则。接受 T 类型的单个参数的静态方法通常应该只是成员方法。
太奇怪了,我实际上不得不发布一个StackOverflow 问题来了解 IsUpper 的存在(因为它没有出现在自动完成中)
编辑
我知道我之前的陈述需要一点解释。一个好的设计示例是 String.ToLower()。它不是被原型化为静态 void ToLower(String foo),而是一个成员方法。很明显(至少对我而言)char.IsLower() 也应该如此。
这似乎违背了每一个设计准则。接受 T 类型的单个参数的静态方法通常应该只是成员方法。
太奇怪了,我实际上不得不发布一个StackOverflow 问题来了解 IsUpper 的存在(因为它没有出现在自动完成中)
编辑
我知道我之前的陈述需要一点解释。一个好的设计示例是 String.ToLower()。它不是被原型化为静态 void ToLower(String foo),而是一个成员方法。很明显(至少对我而言)char.IsLower() 也应该如此。
结构上的实例方法不是线程安全的。另一方面,静态方法是.
静态方法接收结构的副本,实例方法接收托管指针。通过指针访问数据不是安全操作,很容易导致竞争条件。
这就是为什么结构/基元上的大多数方法都是静态的而不是实例的。
这里有一个类似的问题。
在我看来,这确实是有道理的。
有许多接受单个参数的静态方法。用这样的方法计算平方根不是很好:
double d = 100.0;
Console.WriteLine("Square root of d is " + d.Sqrt());
这会降低 OO 设计的“凝聚力”,这不是一个好的做法。把这个职责分给Math
类会更好。
double d = 100.0;
Console.WriteLine("Square root of d is " + Math.Sqrt(d));