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

静态与非静态方法2[重复]

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


    Static vs. non-static method

    哪一个更好的设计

    还是有什么区别?还是仅仅取决于开发商?

    class Foo
    {
        int x;
    
        void add(Foo* f1) //Method 1
        {
            x += f1->x;
        }
    
        static void add(Foo* f1, Foo* 2) //Method 2
        {
            f1->x = f1->x + f2->x;
        }
    
        static Foo* add(Foo* f1, Foo* 2) //Method 3
        {
            Foo* foo = new Foo();
            foo->x = f1->x + f2->x;
            return foo;
        }
    }
    
    4 回复  |  直到 9 年前
        1
  •  3
  •   luc    17 年前

    从面向对象的角度来看,我认为更好的方法是:

    class Foo
    {
        int x;
    
        void add(Foo* f1) //Method 1
        {
            x += f1->x;
        }
    }
    
    

    方法应该链接到对象而不是类。

    在我看来,使用太多的静态方法破坏了对象的好处(多态、继承…)

        2
  •  3
  •   maciejkow    17 年前

    第一个和第三个选择是好的-选择哪一个取决于你的意图。我不会使用第二种选择-它不会透露它的意图。

    Foo f1, f2;
    f1.add(&f2);
    

    他/她已经知道,f1可以/将被此呼叫修改。

    当您使用第三种方法时,您声明不会修改任何传递的对象,因此当程序员看到:

    Foo f1, f2;
    Foo *result;
    result = Foo.add(&f1, &f2);
    

    他/她知道,f1和f2不会被修改(您应该使用语言提供的选项来执行此操作)。

    但是,当您使用第二个选项时,程序员将不知道您是否修改了第一个、第二个、两个或两个参数都不修改。不要使用此选项。

        3
  •  3
  •   Avihu Turzion    17 年前

    对于程序员来说,方法的静态性和非静态性的区别主要在于您希望实现什么样的设计和行为。没有绝对的真理,也没有永远正确的答案。

    直接的区别是静态方法是无状态的,而非静态方法是有状态的。如果这是一个实例化的问题,例如,有许多设计支持静态方法。

    但是只有通过彻底检查设计中类的职责,才能获得设计的正确答案。

        4
  •  1
  •   Daniel Earwicker    17 年前

    推荐文章