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

在可能的情况下,我应该始终使我的方法保持静态吗?

  •  12
  • Nobody  · 技术社区  · 15 年前

    我经常思考这个…这可能是一个愚蠢的问题,但下面是。

    假设我有这个班:

    public class SomeClass
    {
        public int AProperty { get; set; }
    
        public void SomeMethod()
        {
            DoStuff(AProperty);
        }
    }
    

    这样做有什么好处吗:

    public class SomeClass
    {
        public int AProperty { get; set; }
    
        public static void SomeMethod(int arg)
        {
            DoStuff(arg);
        }
    }
    

    唯一明显的优势是我现在可以 SomeMethod 直接。

    所以,将这些方法静态化,只需要一点重构,这是一个好的实践吗?还是浪费我的时间?

    编辑: 我忘了提(Shellshock的评论提醒我)我问的原因是我使用了Resharper,它总是建议“方法x可以变为静态的”,等等……

    5 回复  |  直到 7 年前
        1
  •  15
  •   8protons    7 年前

    Static 静态的

    可能非常有利。AS the accepted answer here 指出, static 可能会提高速度。

    作为一般规则,如果方法不使用类的任何字段,那么它是评估其函数的好时机,但是,最终可以调用而不实例化对象的实用方法通常是有用的。例如 DirectoryInformation FileInformation 类包含有用的静态方法。

    编辑

    有义务指出,这确实让模拟变得更加困难,但它仍然是可以测试的。

    这只意味着你需要更仔细地考虑 在哪里? 静止的

        2
  •  2
  •   Sjoerd    15 年前

    不。 Static is evil . 它将调用者与使用过的类紧密地结合在一起,并且 makes it hard to test .

        3
  •  2
  •   cyphorious    15 年前

    如果您能够在不创建类对象的情况下调用静态方法,那么静态方法是有意义的。例如,在Java中,数学类只包含静态方法,因为只对一个数学类进行数学化操作对其他对象进行数学运算是没有多大意义的。

    大多数情况下,最好避免使用静态方法。你应该熟悉面向对象编程——那里有很多很好的资源,可以解释所有概念,比如静态方法等。

        4
  •  2
  •   Alex Humphrey    15 年前

    我将尝试回答您涉及您提供的代码示例的特定问题。

    SomeMethod

    static TimeSpan CalcAge(DateTime dob) { return DateTime.Now - dob; }
    

    DateTime.Now

    static TimeSpan CalcAge(DateTime dob, DateTime now) { return now - dob; }
    

        5
  •  1
  •   Rahul    15 年前

    推荐文章