C# 静态 (static)
最后修改于 2023 年 7 月 5 日
在本文中,我们将介绍 C# 中的 static 修饰符关键字。
static 修饰符
静态成员属于类型,而不是属于特定的对象。
Console.WriteLine(Math.Abs(-5));
在这里,Abs
是一个静态方法,它属于静态的 Math
类型。我们通过类型名称后跟一个点运算符和一个成员方法名称来引用该方法。
在类、接口和结构体中,我们可以将 static 修饰符用于字段、方法、属性、运算符、事件和构造函数。
静态方法只能使用静态成员;它们不能访问实例变量。
以下是静态类的特性
- 仅包含静态成员
- 无法实例化
- 是密封的;其他类不能继承它
- 不能包含实例构造函数
以下是静态构造函数的特性
- 一个类或结构体只能有一个静态构造函数
- 静态构造函数不能被继承或重载
- 不能直接调用静态构造函数
- 它由公共语言运行时自动调用
- 如果我们不提供静态构造函数来初始化静态字段,则所有静态字段都将初始化为其默认值
C# 静态成员
静态成员属于类型。
namespace StaticMember; static class MyMath { public static double PI = 3.14159265358979323846; } class Program { static void Main(string[] args) { Console.WriteLine(MyMath.PI); Console.WriteLine(Math.Abs(-5)); } }
我们有一个静态的 MyMath
类,其中包含一个静态成员。
Console.WriteLine(MyMath.PI); Console.WriteLine(Math.Abs(-5));
我们引用 MyMath
类的静态 PI
成员。 此外,我们还引用内置 Math
类的静态 Abs
方法。
$ dotnet run 3.141592653589793 5
C# 静态方法
静态方法只能访问静态变量。 它无法访问实例变量。 静态方法只能调用其他静态方法。
namespace SimpleEx; class Program { static int i = 0; static void Main(string[] args) { Console.WriteLine(i); i = i + 5; Console.WriteLine(i); Inc(); Console.WriteLine(i); Dec(); Console.WriteLine(i); } static void Inc() { i = i + 1; } static void Dec() { i = i - 1; } }
在此示例中,我们有一个静态变量 i
和静态方法 Main
、Console.WriteLine
、Inc
和 Dec
。
static void Main(string[] args) ...
Main
方法是 C# 应用程序的经典入口点。 在静态 Main
方法中,我们只能调用静态方法。
$ dotnet run 0 5 6 5
C# 扩展方法
static
关键字用于定义扩展方法。 扩展方法是可以插入到现有类型的方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。
var vals = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 }; vals.Shuffle(); var res = string.Join(" ", vals); Console.WriteLine(res); static class MyExtensions { private static Random rng = new Random(); public static void Shuffle<T>(this IList<T> vals) { int n = vals.Count; while (n > 1) { n--; int k = rng.Next(n + 1); T value = vals[k]; vals[k] = vals[n]; vals[n] = value; } } }
在此示例中,我们定义了一个 Shuffle
扩展方法。
vals.Shuffle();
我们调用 Shuffle
扩展方法。 编译器将其转换为 MyExtensions.Shuffle(vals);
。
static class MyExtensions
扩展方法在静态类中定义。
private static Random rng = new Random();
我们用来生成随机顺序的成员是静态的。
public static void Shuffle<T>(this IList<T> vals)
Shuffle
方法也使用 static
修饰符声明。
$ dotnet run 8 7 5 4 1 6 3 2 $ dotnet run 1 3 6 8 5 7 2 4
C# using static 指令
using static 允许我们访问类型的静态成员和嵌套类型,而无需使用类型名称限定访问。
using static System.Math; Console.WriteLine(Sqrt(3*3 + 4*4));
在此示例中,我们将 Sqrt
方法导入到我们的命名空间中。
来源
在本文中,我们使用了 C# 中的 static
修饰符。
作者
列出所有 C# 教程。