在本文中,我们介绍了C#中的static修饰符关键字。
静态修饰符
静态成员属于类型而不是特定对象。
Console.WriteLine(Math.Abs(-5));
这里,Abs
是属于静态Math
类型的静态方法。我们通过类型名称后跟点运算符和成员方法名称来引用方法。
在类、接口和结构中,我们可以对字段、方法、属性、运算符、事件和构造函数使用静态修饰符。
静态方法只能对静态成员起作用;他们不能访问实例变量。
以下是静态类的特性:
- 只包含静态成员
- 不能实例化
- 是密封的;其他类不能从它继承
- 不能包含实例构造函数
以下是静态构造函数的特性:
- 一个类或结构体只能有一个静态构造函数
- 静态构造函数不能被继承或重载
- 静态构造函数不能被直接调用
- >它由公共语言运行时自动调用
- 如果我们不提供静态构造函数来初始化静态字段,则所有静态字段都被初始化为它们的默认值
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
成员。此外,我们引用内置的静态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#使用静态指令
usingstatic允许我们访问静态成员和类型的嵌套类型,而无需使用类型名称限定访问。
using static System.Math; Console.WriteLine(Sqrt(3*3 + 4*4));
在示例中,我们将Sqrt
方法导入到我们的命名空间中。
在本文中,我们使用了C#中的static
修饰符。
列出所有C#教程。