10.静态类和静态构造函数

10.面向对象-封装-静态类和静态构造函数


10.1 知识点

知识回顾

class Person
{
    #region 特征——成员变量
    #endregion
    #region 行为——成员方法
    #endregion
    #region 初始化调用——构造函数
    #endregion
    #region 释放时调用——析构函数
    #endregion
    #region 成员属性
    #endregion
    #region 索引器
    #endregion
    #region 静态成员
    #endregion
}

静态类

  • 定义:
    • 类语句块外,namespace 语句块内。
    • static 修饰的类。
  • 特点:
    • 只能包含静态成员。
    • 不能被实例化。
  • 作用:
    • 将常用的静态成员写在静态类中,方便使用。
    • 静态类不能被实例化,更能体现工具类的唯一性。
  • 示例:
    // 静态工具类
    static class Tools
    {
        // 静态成员变量
        public static int testIndex = 0;
    
        // 静态成员方法
        public static void TestFun()
        {
    
        }
    
        // 静态成员属性
        public static int TestIndex
        {
            get;
            set;
        }
    }
    
  • 主函数内:
    // 无法创建静态类实例
    // Console c = new Console();
    

静态构造函数

  • 定义:
    • 类语句块外,namespace 语句块内。
    • 在构造函数上加上 static 修饰。
  • 特点:
    • 静态类和普通类都可以有静态构造函数。
    • 不能使用访问修饰符。
    • 不能有参数。
    • 只会自动调用一次。
  • 作用:
    • 在静态构造函数中初始化静态变量。
  • 使用:
    • 静态类中的静态构造函数
      static class StaticClass
      {
          public static int testInt = 100;
          public static int testInt2 = 100;
      
          // 不能使用访问修饰符,3P无效
          static StaticClass()
          {
              Console.WriteLine("静态类中的静态构造");
              // 初始化成员变量
              testInt = 200;
              testInt2 = 300;
          }
      }
      
    • 普通类中的静态构造函数
      class NormalClass
      {
          public static int testInt = 200;
      
          // 不能使用访问修饰符,3P无效
          // 静态构造函数
          static NormalClass()
          {
              Console.WriteLine("普通类中的静态构造");
          }
      
          // 成员构造函数
          public NormalClass()
          {
              Console.WriteLine("普通类中的普通构造");
          }
      }
      
  • 主函数内:
    // 使用静态类的成员时,静态构造函数会自动调用一次
    // 会打印出 "静态类中的静态构造"
    Console.WriteLine(StaticClass.testInt); // 200
    Console.WriteLine(StaticClass.testInt2); // 300
    Console.WriteLine(StaticClass.testInt); // 200
    
    // 静态构造函数会自动调用一次
    // 会打印出 "普通类中的静态构造"
    Console.WriteLine(NormalClass.testInt); // 200
    NormalClass t = new NormalClass(); // 普通类中的普通构造
    NormalClass t2 = new NormalClass(); // 普通类中的普通构造
    

总结

  • 静态类
    • static 修饰的类。
    • 特点:
      • 只能包含静态成员。
      • 不能实例化。
    • 作用:
      • 工具类。
      • 拓展方法。
  • 静态构造函数
    • static 修饰的构造函数。
    • 特点:
      • 静态类和普通类都可以有。
      • 不能使用访问修饰符。
      • 不能有参数。
      • 只会自动调用一次。
    • 作用:
      • 初始化静态成员。

10.2 知识点代码

using System;

namespace Lesson8_封装_静态类和静态构造函数
{
    #region 知识回顾
    class Person
    {
        #region 特征——成员变量

        #endregion

        #region 行为——成员方法

        #endregion

        #region 初始化调用——构造函数

        #endregion

        #region 释放时调用——析构函数

        #endregion

        #region 成员属性

        #endregion

        #region 索引器

        #endregion

        #region 静态成员

        #endregion
    }
    #endregion

    //class语句块外 namespace语句块内

    #region 知识点一 静态类

    //概念
    //用static修饰的类

    //特点
    //只能包含静态成员
    //不能被实例化

    //作用
    //1.将常用的静态成员写在静态类中 方便使用
    //2.静态类不能被实例化,更能体现工具类的 唯一性
    //比如 Console就是一个静态类

    //示例
    //静态 工具 类
    static class Tools
    {
        //静态成员变量
        public static int testIndex = 0;

        //静态成员方法
        public static void TestFun()
        {

        }

        //静态成员属性
        public static int TestIndex
        {
            get;
            set;
        }
    }

    #endregion

    #region 知识点二 静态构造函数
    //概念
    // 在构造函数加上 static 修饰

    //特点
    //1.静态类和普通类都可以有
    //2.不能使用访问修饰符
    //3.不能有参数  
    //4.只会自动调用一次  

    //作用
    //在静态构造函数中初始化 静态变量

    //使用
    //1.静态类中的静态构造函数
    static class StaticClass
    {
        public static int testInt = 100;
        public static int testInt2 = 100;

        //不能使用访问修饰符 3P无效
        static StaticClass()
        {
            Console.WriteLine("静态类中的静态构造");
            //初始化成员变量
            testInt = 200;
            testInt2 = 300;
        }
    }

    //2.普通类中的静态构造函数
    class NormalClass
    {
        public static int testInt = 200;

        //不能使用访问修饰符 3P无效
        //静态构造函数
        static NormalClass()
        {
            Console.WriteLine("普通类中的静态构造");
        }

        //成员构造函数
        public NormalClass()
        {
            Console.WriteLine("普通类中的普通构造");
        }
    }
    #endregion
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("静态类和静态构造函数!");

            //主函数内

            #region 知识点一 静态类

            //Console c = new Console();
            //报错 无法创建静态类实例

            #endregion

            #region 知识点二 静态构造函数


            //使用静态类的成员时 静态构造函数 会 自动调用一次  
            //会打印出 静态类中的静态构造
            Console.WriteLine(StaticClass.testInt);//200
            Console.WriteLine(StaticClass.testInt2);//300
            Console.WriteLine(StaticClass.testInt);//200

            //静态构造函数 会 自动调用一次 
            //会打印出 普通类中的静态构造
            Console.WriteLine(NormalClass.testInt);//200
            NormalClass t = new NormalClass();//普通类中的普通构造
            NormalClass t2 = new NormalClass();//普通类中的普通构造

            #endregion
        }
    }

    //总结

    //静态类
    //用static 修饰的类
    //特点
    //只能包含静态成员
    //不能实例化
    //作用
    //工具类
    //拓展方法

    //静态构造函数
    //用static修饰的构造函数
    //特点
    //静态类和普通类都可以有静态构造函数
    //不能使用访问修饰符
    //不能有参数
    //只会自动调用一次
    //作用
    //初始化静态成员
}

10.3 练习题

写一个用于数学计算的静态类,该类中提供计算圆面积,圆周长,矩形面积,矩形周长,取一个数的绝对值等方法

class语句块外 namespace语句块内

// class语句块外 namespace语句块内
// 数学工具类
static class MathTool
{
    // 静态成员变量 π
    public static float PI = 3.14f;

    /// <summary>
    /// 计算圆的面积
    /// </summary>
    /// <param name="r">半径</param>
    /// <returns>面积</returns>
    public static float CalcCircularArea(float r)
    {
        return PI * r * r;
    }

    /// <summary>
    /// 计算圆的周长
    /// </summary>
    /// <param name="r">半径</param>
    /// <returns>周长</returns>
    public static float CalcCircularLength(float r)
    {
        return 2 * PI * r;
    }

    /// <summary>
    /// 计算矩形的面积
    /// </summary>
    /// <param name="w">宽</param>
    /// <param name="h">高</param>
    /// <returns>面积</returns>
    public static float CalcRectArea(float w, float h)
    {
        return w * h;
    }

    /// <summary>
    /// 计算矩形的周长
    /// </summary>
    /// <param name="w">宽</param>
    /// <param name="h">高</param>
    /// <returns>周长</returns>
    public static float CalcRectLength(float w, float h)
    {
        return 2 * w + 2 * h;
    }

    /// <summary>
    /// 计算绝对值
    /// </summary>
    /// <param name="value">去绝对值的变量</param>
    /// <returns>去绝对值后的值</returns>
    public static float GetABS(float value)
    {
        if (value < 0)
        {
            return -value;
        }
        return value;
    }
}

主函数内

// 主函数内
Console.WriteLine(MathTool.GetABS(-7));//7
Console.WriteLine(MathTool.CalcCircularArea(2));//12.56
Console.WriteLine(MathTool.CalcCircularLength(3));//18.84
Console.WriteLine(MathTool.CalcRectArea(2, 3));//6
Console.WriteLine(MathTool.CalcRectLength(2, 3));//10

10.4 练习题代码

using System;

namespace Lesson8_练习题
{
    #region 练习题一
    //写一个用于数学计算的静态类
    //该类中提供计算圆面积,圆周长,矩形面积,矩形周长,取一个数的绝对值 等方法

    //class语句块外 namespace语句块内

    //数学工具类
    static class MathTool
    {
        //静态成员变量 π
        public static float PI = 3.14f;

        /// <summary>
        /// 计算圆的面积
        /// </summary>
        /// <param name="r">半径</param>
        /// <returns>面积</returns>
        public static float CalcCircularArea(float r)
        {
            return PI * r * r;
        }

        /// <summary>
        /// 计算圆的周长
        /// </summary>
        /// <param name="r">半径</param>
        /// <returns>周长</returns>
        public static float CalcCircularLength(float r)
        {
            return 2 * PI * r;
        }

        /// <summary>
        /// 计算矩形的面积
        /// </summary>
        /// <param name="w">宽</param>
        /// <param name="h">高</param>
        /// <returns>面积</returns>
        public static float CalcRectArea(float w, float h)
        {
            return w * h;
        }

        /// <summary>
        /// 计算矩形的周长
        /// </summary>
        /// <param name="w">宽</param>
        /// <param name="h">高</param>
        /// <returns>周长</returns>
        public static float CalcRectLength(float w, float h)
        {
            return 2 * w + 2 * h;
        }

        /// <summary>
        /// 计算绝对值
        /// </summary>
        /// <param name="value">去绝对值的变量</param>
        /// <returns>去绝对值后的值</returns>
        public static float GetABS(float value)
        {
            if( value < 0 )
            {
                return -value;
            }
            return value;
        }
    }
    #endregion
    class Program
    {
        static void Main(string[] args)
        {
            //主函数内

            #region 练习题一
            Console.WriteLine(MathTool.GetABS(-7));//7
            Console.WriteLine(MathTool.CalcCircularArea(2));//12.56
            Console.WriteLine(MathTool.CalcCircularLength(3));//18.84
            Console.WriteLine(MathTool.CalcRectArea(2, 3));//6
            Console.WriteLine(MathTool.CalcRectLength(2, 3));//10
            #endregion
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏