Home
06 静态类
Unity
06 静态类
姜睿
姜睿
August 21, 2022
1 min

Table Of Contents

01
sealed 密封类
02
static 静态类
03
static 静态关键字

sealed 密封类

示例

1
2sealed class SealedBase
3{
4private int field = 0;
5}
6
7// CS0509
8class Derived : SealedBase
9{
10private int field = 0;
11}
12

最佳实践 1

  • 在不得已的情况下使用 sealed 类。
  • 不在密封类中声明 protectedvirtual 成员。

static 静态类

特性

  • 所有成员都是静态的。
  • 隐式密封,无法继承。

示例 1

1
2public static class Math
3{
4public const double PI = 3.14159265358979323846;
5public const double E = 2.7182818284590452354;
6public static int Min(int val1, int val2)
7{
8return (val1 <= val2) ? val1 : val2;
9}
10}
11
12internal class Program
13{
14private static void Main(string[] args)
15{
16// 3.14
17Console.WriteLine(Math.PI.ToString("f2"));
18}
19}
20

示例 2 - 扩展方法

  • this 关键字将 ExtendArray 的方法拓展到了 arr 上。

要求

  • 必须为 static 类中 static 的方法。
1
2public static class ExtendArray
3{
4public static int[] Unique(int[] arr)
5{
6return arr.GroupBy(p => p).
7Select(p => p.Key).ToArray();
8}
9}
10
11internal class Program
12{
13private static void Main(string[] args)
14{
15int[] arr = { 1, 1, 2, 2, 3, 3 };
16// 1 2 3
17foreach (int i in ExtendArray.Unique(arr))
18{
19Console.Write(i + " ");
20}
21}
22}
23
1
2public static class ExtendArray
3{
4public static int[] Unique(this int[] arr)
5{
6return arr.GroupBy(p => p).
7Select(p => p.Key).ToArray();
8}
9}
10
11internal class Program
12{
13private static void Main(string[] args)
14{
15int[] arr = { 1, 1, 2, 2, 3, 3 };
16// 1 2 3
17foreach (int i in arr.Unique())
18{
19Console.Write(i + " ");
20}
21}
22}
23

static 静态关键字

特性

  • 即使不存在类的实例对象,静态成员也存在。
    • 静态成员和实例成员分开保存。
  • 无法使用 this 关键字,因为 this 指向该类的实例。
  • static 字段被类的所有实例对象共享。
  • 常数和索引器无法使用 static 关键字。
1
2internal class Arrow
3{
4public static string name = "Arrow";
5private int _attack = 2;
6
7public void Rename(string _name)
8{
9name = _name;
10}
11public void PrintInfo()
12{
13Console.WriteLine(name);
14}
15}
16
17internal class Program
18{
19private static void Main(string[] args)
20{
21// Arrow
22Console.WriteLine(Arrow.name);
23Arrow arrow1 = new Arrow();
24Arrow arrow2 = new Arrow();
25arrow1.PrintInfo(); // Arrow
26arrow2.PrintInfo(); // Arrow
27// only rename arrow1
28arrow1.Rename("New");
29arrow1.PrintInfo(); // New
30arrow2.PrintInfo(); // New
31}
32}
33

  1. Sealing | Microsoft Docs.

Tags

#game developc#
姜睿

姜睿

学生

游戏设计学生

Expertise

游戏开发
平面设计

Related Posts

策略模式
策略模式
November 19, 2023
1 min

Legal Stuff

Privacy NoticeCookie PolicyTerms Of Use