是不是应该在对象之后调用类而不是动作?它只是不符合我学到的OO理论。
有一种想法是,因为Convert只包含静态方法,所以根本不应该创建它的实例,这可能使它成为可接受的例外。
答案 0 :(得分:18)
在C#中,您无法在类或结构之外创建方法。因此,当您想要创建实用程序方法时,最好将它们存储在静态类中。
所以我会说没有关于静态类的任何面向对象。
答案 1 :(得分:9)
没有关于Convert类的面向对象,因为面向对象是关于带有行为的数据,而Convert类没有数据或状态。
这基本上是一个实际的考虑因素。
例如,在Eiffel中,转换方法已在基类中定义,并且需要使用转换方法的所有类都将从该基类派生。但是,Eiffel有多重继承,因此对于Eiffel来说是有意义的,但对于没有多重继承的C#这样的语言则没有。答案 2 :(得分:5)
你的想法是正确的。 Convert
是一个静态实用程序类,有一个目的 - 在不同类型之间进行转换。
它只有方法(动词),所有这些都是转换 - 因此,为了便于阅读,最好将普通动词的名称赋予类本身,而不是在每个方法中重复它:
int i = Convert.ToInt32(value);
float f = Convet.ToSingle(value);
比以下更流畅和可读:
int i = Conversions.ConvertToInt32(value);
float f = Conversions.ConvertToSingle(value);
答案 3 :(得分:4)
我个人认为,在行动之后调用Convert类是可以的,因为它是一个静态类,并且不会被实例化。
呼叫
听起来更好听Convert.ToBoolean(var);
而不是
Converter.ConvertToBoolean(var);
答案 4 :(得分:4)
命名约定是有趣的野兽。最重要的是整个框架的一致性。
毋庸置疑,OO惯例可以真正帮助构建易读性。在这种情况下,转换类及其静态方法是使用c#的全局函数的最佳尝试替换,并且被赋予 fluid 名称以指示这样。
将[parameter]转换为Int32
将[parameter]转换为Single
通过将它们命名为动作而不是对象,我们还可以传达功能纯度。
这通常在单例模式中以及Instance
属性中看到。