开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C#静态

在本文中,我们介绍了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和静态方法MainConsole.WriteLineInc,和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#教程。

未经允许不得转载:我爱分享网 » C#静态

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏