我有一个类,其中定义了两个方法。
public class Routines {
public static method1() {
/* set of statements */
}
public static method2() {
/* another set of statements.*/
}
}
现在我需要从method2()
调用method1()以下哪种方法更好?或者这是否有资格作为问题?
public static method2() {
method1();
}
OR
public static method2() {
Routines.method1();
}
答案 0 :(得分:12)
虽然我同意现有的答案,这主要是一个样式问题,但是Eclipse和IntelliJ的代码评论家都会在不使用该代码的代码中标记“对静态方法的非静态引用”这样的样式问题已经足够了。 Classname.method()
风格。
我习惯强调 intent ,方法是使用classname来限定对静态目标的引用,this
来限定对实例目标的引用,以及本地引用的裸名称。现代IDE将对这些构造使用不同的突出显示,所以我认为它现在不那么重要了。我喜欢维护者(通常是我自己)知道意图是什么,是的,我知道这是static
引用。
是的,它确实会产生稍微冗长的代码,但我认为值得额外的角色。
答案 1 :(得分:6)
我会选择第一种方法。在我看来,这相当于:
public void method2()
{
method1();
}
和
public void method2()
{
this.method1();
}
我不知道很多人在类中调用另一个方法时明确调用 this 。所以我个人的口味是选项1 - 不需要明确调用ClassName。
答案 2 :(得分:1)
嗯,它有资格作为一个问题,但显然结果将是相同的两种方式,所以这只是一种风格问题。 (可能有很奇怪的过载情况,可以发挥作用,但你应该避免那些开始。如果你愿意,我可以提出例子,但它可能不值得。)
如果您觉得特别需要强调它是一种静态方法,请随意将其Routines.method1()
- 但通常我会将其保留为method1()
。
编辑:我试图想出一个例子,它使用params
进行重载会有所作为:
void CallMethod()
{
Console.WriteLine("Calling Method()");
Method();
Console.WriteLine("Calling Test.Method()");
Test.Method();
}
void Method(params string[] ignored)
{
Console.WriteLine (" Instance method called");
}
static void Method()
{
Console.WriteLine (" Static method called");
}
但是在这两种情况下都会调用静态方法。 (有趣的是,将params
放在静态方法上会使用MS C#编译器产生一个稍微混乱的错误消息,并彻底炸毁Mono编译器 - 至少我正在使用的版本。)
使用参数,您可以使用泛型类型参数和类型推断进入奇怪的情况,但不能没有任何参数。即便如此,非通用形式也会优先。
简而言之,毕竟我认为我无法做到:(
答案 3 :(得分:1)
这纯粹是一个风格问题,所以这取决于你的品味。
我更喜欢第一个版本。因为这两个方法属于同一个类,所以我觉得重复类名没有用。
答案 4 :(得分:0)
我做
public static method2() {
Routines.method1();
}
没有猜测。 我是否从父类调用静态方法非常清楚。 出于同样的原因,我不喜欢静态导入。
答案 5 :(得分:0)
这只是个人偏好和代码可读性的问题,但只调用“method1()”并不等同于“this.method”,因为示例中的两个方法都是静态的,你不能调用一个对象,它有没有被实例化。使用静态方法无法预见,如果在调用方法时有实例化对象,则不能使用“this”。 “this”只是指向执行对象的指针,如果实例化的话。
回答这个问题:
只需编写“method1()”而不是“Routines.method1()”就是完整的语法糖。计算机执行/调用的结果(编译器从代码中生成的结果)完全相同。