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