System.Convert如何适合OO约定?

时间:2014-03-04 09:28:22

标签: c# oop

是不是应该在对象之后调用类而不是动作?它只是不符合我学到的OO理论。

有一种想法是,因为Convert只包含静态方法,所以根本不应该创建它的实例,这可能使它成为可接受的例外。

5 个答案:

答案 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属性中看到。