代码之家  ›  专栏  ›  技术社区  ›  pramodc84

调用方法与类方法

  •  1
  • pramodc84  · 技术社区  · 17 年前

    我有一个类,其中定义了两个方法。

    public class Routines {
    
         public static method1() {
          /* set of statements */
         }
    
         public static method2() {
          /* another set of statements.*/
         }
    }
    

    现在我需要从method2()调用method1()。

    以下哪种方法更好?或者这可以作为一个问题吗?

    public static method2() {
    
            method1();
    
    }
    

    或

    public static method2() {
    
            Routines.method1();
    
    }
    
    6 回复  |  直到 17 年前
        1
  •  12
  •   Ken Gentle    17 年前

    虽然我同意现有的答案,即这主要是一个样式问题,但Eclipse和Intellij的代码批评者将在不使用 Classname.method() 风格。

    我习惯强调 意图 通过使用类名来限定对静态目标的引用, this 限定对实例目标的引用,以及本地引用的裸名称。现代的IDE将对这些结构使用不同的突出显示,所以我认为现在它不那么重要。我喜欢维护者(通常是我自己)去 知道 是的,我知道这是一个 static 参考文献。

    是的,它确实会使代码稍微更冗长一些,但我认为它值得使用额外的字符。

        2
  •  6
  •   Yuval Adam    17 年前

    我会用第一种方法。在我看来,这相当于:

    public void method2()
    {
        method1();
    }
    

    还有:

    public void method2()
    {
        this.method1();
    }
    

    我不知道有多少人明确地打电话给 这 在类中调用另一个方法时。所以我个人的品味是选项1——不需要显式地调用类名。

        3
  •  1
  •   Guillaume    17 年前

    这纯粹是一个风格问题,所以这取决于你的品味。

    我喜欢第一版。因为这两个方法在同一个类中,所以我觉得重复类名是不有用的。

        4
  •  1
  •   Jon Skeet    17 年前

    好吧,这是一个问题,但很明显结果会是一样的,所以这只是一个风格问题。(可能有奇怪的过载情况 能够 做一个改变,但你应该避免那些开始。如果你愿意,我可以举出一些例子,但可能不值得。)

    如果你觉得有必要强调这是一种静态方法,可以随意使用 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");
    }
    

    不过,这两种情况下都会调用静态方法。(有趣的是, 帕拉姆 在静态方法中,使用MS C编译器会给出一个稍微令人困惑的错误消息,并且会完全破坏Mono编译器-至少是我使用的版本。)

    使用参数,可以使用泛型类型参数和类型推断进入奇怪的情况,但不使用任何参数。即便如此,非泛型形式仍将优先。

    简而言之,我想我根本做不到:(

        5
  •  0
  •   Dennis C    17 年前

    我愿意

    public static method2() {
            Routines.method1();
    }
    

    没有猜测。 很明显,如果我从父类调用静态方法。 我不喜欢静态导入是因为同样的原因。

        6
  •  0
  •   Steven Chong    17 年前

    这只是一个个人喜好和代码可读性的问题,但是仅仅调用“method1()”并不等同于“this.method”,因为示例中的两个方法都是静态的,并且不能调用尚未实例化的对象。对于静态方法,如果在调用该方法时有一个实例化的对象,则无法预见,因此不能使用“this”。如果实例化,则此“仅是指向已执行对象的指针。

    回答问题:

    只写“method1()”而不写“routines.method1()”是完整的语法结构。计算机执行/调用的结果,即编译器从代码中生成的结果,完全相同。