【问题标题】:Static Classes and Methods Practical Examples [duplicate]静态类和方法实用示例 [重复]
【发布时间】:2011-10-25 21:48:57
【问题描述】:

可能重复:
When to Use Static Classes in C#

我了解静态类和静态类成员的概念,但我确信我可以在我的项目中更多地使用它们。有人可以向我展示一些他们在 C# 中创建和使用静态类的实际示例吗?

谢谢

【问题讨论】:

  • 无法实例化静态类。您可能需要多个实例,例如“发票”类。您不希望有多个实例,例如“生成语句”类。

标签: c# static


【解决方案1】:

静态类和方法最实用的用途是创建扩展方法。就像 Linq Query 扩展方法一样。

【讨论】:

  • +1 用于扩展方法
  • 你能发布语法或指向一个写得很好的教程吗?
  • 我在下面添加了一个扩展方法的例子。
【解决方案2】:

实用程序类、Helper 类、转换类...任何放在实例上没有意义但与其他类实例一起使用的方法组都是很好的候选对象。还有很多其他的例子——这些只是其中的一小部分。

【讨论】:

    【解决方案3】:

    我使用static 类的大部分时间是用于工具、实用程序功能。

    【讨论】:

      【解决方案4】:

      静态类(使用 static 关键字)是一个既是抽象类又是密封类的类。因此允许使用静态成员。 您需要使用静态类来实现扩展方法,因为这是由 c# 编译器仲裁的。

      【讨论】:

        【解决方案5】:

        任何时候您需要在您的设计中表示一个流程,而不是一个实体,或者,您应该使用静态类。 Process 是设计中的对象或事物,它没有状态,但可以操纵或管理其他对象的状态。它将具有不涉及类本身的私有或公共状态变量的静态方法,而仅对传递给这些方法的对象的公共属性进行操作。

        一些示例可能包括为学术机构执行调度功能的类,

        或负责在入境口岸处理货运和运输集装箱以装载到船舶或飞机上的类。

        【讨论】:

          【解决方案6】:

          考虑单例模式 - 你想使用一个实例并且只使用一个实例:

           public class MySingleton
           {
                protected static Lazy<MySingleton> _instance = new Lazy<MySingleton>(() => new MySingleton());
          
                protected MySingleton() {}
          
                public static MySingleton Instance
                {
                    get { return _instance.Value; }
                }
           }
          

          类的构造方式,你只能使用一个实例,存储在静态变量中。考虑HttpContext.Current 静态属性。

          此外,静态项对于状态维护很有用;假设你想在内存中缓存一些任何实例都需要的数据,但不需要重新获取数据。

          您还需要为扩展方法创建静态类。

          【讨论】:

            【解决方案7】:

            静态类就像一个容器,用于保存方法和其他数据。
            考虑一个数学实用程序类。您不想创建 MathUtility 的实例,但您可以定义一个常量(例如 PI)或一些用于数学功能的方法(static double sqrt(double))。

            您可以在非静态类中完成所有这些事情;但他们可能与他们所属的班级没有太大关系。

            它们也是扩展方法所必需的 - 允许您增强预定义类的功能。

            请参阅 link 了解 C# 中的数学类。

            【讨论】:

              【解决方案8】:

              响应您对扩展方法示例的请求,这会将字符串的第一个字母大写。

              public static class StringExtensions
                  {
                      public static string UppercaseFirst(this String s)
                      {
                          if (string.IsNullOrEmpty(s))
                          {
                              return string.Empty;
                          }
                          char[] a = s.ToCharArray();
                          a[0] = char.ToUpper(a[0]);
                          return new string(a);
                      }
                  }
              

              代码中的其他地方,你可以像这样使用它

              var pirate = "yar";
              System.Diagnostics.Debug.WriteLine(pirate.UppercaseFirst());
              //Yar
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-10-25
                • 2018-03-07
                • 1970-01-01
                • 2020-02-28
                • 2012-11-12
                • 1970-01-01
                • 1970-01-01
                • 2011-10-30
                相关资源
                最近更新 更多