C#和java是否支持静态类型?

Rav*_*sha 3 c# java

我一直在使用Singleton类和静态方法,并且总是想知道有一个单独的类型是一个静态类型并且无法实例化但只有静态方法会有多好!

它易于阅读并且易于维护.

对于前

public UtilType MyUtility
{
  public void Calculate(int x,int y)
  {
    return x+y;
  }
}
Run Code Online (Sandbox Code Playgroud)

这里MyUtility不应该被允许实例化,只能以静态方式访问其方法.

Mar*_*ann 9

在C#中,您可以使用以下static关键字来执行此操作:

public static class MyUtility
{
    public static void Calculate(int x,int y)
    {
        return x+y;
    }
}
Run Code Online (Sandbox Code Playgroud)

那会让你写

var result = MyUtility.Calculate(1, 2);
Run Code Online (Sandbox Code Playgroud)

遍布你的代码.

但是,它不是非常面向对象,所以总是考虑是否有更好的替代方案.面向对象的设计是关于数据和行为,而这样的静态类是纯粹的行为.这几乎与纯数据类一样糟糕,但这些通常是一起看的.

我个人发现过度使用静态类型的代码气味.

  • 您是否也发现所有LINQ都是代码味道?纯功能语言怎么样? (3认同)
  • 我不同意这一点.你不经常有一段代码只做纯计算而不改变非静态对象值吗?总是需要静态方法.至少我已经发现了很多次 (2认同)
  • @Justice:不,我没有发现LINQ是代码气味,但从更大的角度来看,它们实际上可能是,因为它们可以替代mixins.当谈到函数式语言时,它是一个不同的讨论 - "静态"是OOD中的代码味道.静态(或共享)状态的概念在FP中或多或少没有意义,因为一切都是不可变的 - 没有状态. (2认同)
  • 请记住,*代码气味*一词表示特定的代码片段需要进一步调查.毕竟,代码可能会很好,但平均而言,事实并非如此.纯粹的计算通常证明是证明规则的例外,但就个人而言,我*很少需要实现实现纯计算的类,因为我的类库已经提供了我需要的东西.当然,如果你使用高级数学,你的情况可能与我的完全不同,在这种情况下,静态类可能是有保证的. (2认同)

Jos*_*dan 5

你试过......静态类型?

public static class MyUtility
{
    public static void Calculate(int x,int y)
    {
        return x+y;
    }
}
Run Code Online (Sandbox Code Playgroud)

和...

public class AnyOtherClass
{
     public void AnyOtherMethod()
     {
          MyUtility.Calculate(4,5);
     }
}
Run Code Online (Sandbox Code Playgroud)