C#类的静态方法和数据

来源:互联网 发布:erp软件价格 编辑:程序博客网 时间:2024/06/17 01:36
System.math类的Sqrt方法不需要新建实例即可运行;类似地,査看Circle类的内部,会看到它使用了 Math类的PI字段。仔细想--想,就会发现调用Sqrt方法(Math.Sqrt)或者使用PI_字段(Math.PI) 的方式有点儿奇怪。我们是直接在类的上面调用方法,也是直接在类的上面使用字段,而不是先创建Math类的一个对象,再在这个对象的基础上调用方法和使用宇段。这就好像是 直接使用Point.DistanceTo,而不是使用origin.DistanccTo(假设origin是Point类的一个实例)。到底发生了什么,为什么能这样写代码呢?
事实上,并不是所有方法都必须通过类的实例来提供。这些“与众不同”的方法称为工具 方法或者实用方法(utility method)。它们通常提供了一个有用的功能,而且这个功能独立于 任何具体的类实例。Sqrt方法就是其中的一个例子。假如把Sqrt设计成Math类的一个实 例方法,就必须先创建一个Math对象,然后才能在那个对象上调用Sqrt:


Math m= new Math() ; double d = in. Sqrt(42.24);




这显然太麻烦了。Math对象在平方根计算中根本不发挥任何作用.Sqrt需要的所有输入数 据都己经在参数列表中提供了,结果也通过方法的返冋值冋传给了调用者。对象在这里是 不必要的,所以强迫Sqrt成为一个实例方法并小是一个好主意。除了 Sqrt方法和PI字段, Math类还包含其他许多用于数学计算的工具方法,例如Sin, Cos, Tan和Log等。
在C#屮,所有方法都必须在一个类的内部声明。然而,如果把一个方法或字段声明为static,就可以使用类名来调用方法或访问字段。下面展示了 Math类的Sqrl方法具体是如 何声明的:

class Math {public stacic double Sqrt(double d){ ... }...}



在static(静态)方法中,不能访问类中定义的任何实例字段。相反,只能访问static字段。此外,只能直接调用类中的其他static方法;非static的方法(即实例方法)要求先创建一个对 象,然后方能在那个对象上调用那些方法。
0 0