静态类
本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 13 课,共 70 课。
如果一个类只包含静态成员,而且你不需要创建它的实例,就可以将整个类声明为 static。这样可以告诉编译器,这个类不能被实例化,并且只能包含静态成员。
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}使用静态类的方式和使用静态成员一样,直接通过类名调用:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;静态类有一些重要限制。你不能使用 new 创建实例,静态类不能有实例构造函数,也不能被继承。静态类只能包含静态字段、属性和方法。
你一直在使用的 Console 和 Math 类是静态类的典型示例。它们提供实用功能,无需对象状态。静态类非常适合用于归类相关的辅助方法或常量,这些方法或常量不需要任何特定于实例的数据。
挑战
简单让我们使用静态类构建一个温度转换工具,用它来归类不需要任何对象状态的相关辅助方法。
你将创建两个文件来组织代码:
TemperatureConverter.cs:在Utilities命名空间中定义一个名为TemperatureConverter的静态类。这个类应包含:- 一个静态字段
AbsoluteZeroCelsius,值设为-273.15 - 一个静态方法
CelsiusToFahrenheit(double celsius),使用公式(celsius * 9 / 5) + 32将摄氏温度转换为华氏温度 - 一个静态方法
FahrenheitToCelsius(double fahrenheit),使用公式(fahrenheit - 32) * 5 / 9将华氏温度转换为摄氏温度 - 一个静态方法
IsAboveAbsoluteZero(double celsius),如果温度高于绝对零度,则返回true
- 一个静态字段
Program.cs:在主文件中使用静态类进行温度转换。从输入中读取摄氏温度值,然后显示转换结果和验证结果。
你将收到一个输入:一个摄氏温度值。
按以下格式打印结果:
{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}C例如,如果输入是 25,输出应为:
25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15C请记住,静态类无法实例化。你需要直接通过类名调用所有方法,例如 TemperatureConverter.CelsiusToFahrenheit(25)。
亲手试试
using System;
using Utilities;
class Program
{
public static void Main(string[] args)
{
// 读取摄氏温度
double celsius = Convert.ToDouble(Console.ReadLine());
// TODO:使用 TemperatureConverter 的静态方法:
// 1. 将 celsius 转换为华氏温度
// 2. 将 fahrenheit 转换回摄氏温度
// 3. 检查温度是否高于绝对零度
// 4. 获取绝对零度常量
// TODO:按要求的格式输出结果:
// {celsius}C = {fahrenheit}F
// {fahrenheit}F = {convertedBack}C
// Above Absolute Zero: {True/False}
// Absolute Zero: {AbsoluteZeroCelsius}C
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: C# 在线编译器