home commit with new plugins
This commit is contained in:
+49
-32
@@ -1,51 +1,68 @@
|
||||
# 静态成员
|
||||
概念:
|
||||
用static 修饰的成员变量、方法、属性
|
||||
- 用 `static` 修饰的成员叫静态成员
|
||||
- 静态成员属于==类型本身==,不属于某个具体对象
|
||||
- 常见的静态成员有:静态字段、静态方法、静态属性、静态事件
|
||||
|
||||
特点:
|
||||
==直接用类名点出来使用 没有实例化!!!!==
|
||||
- 一般通过==类名.成员名==访问
|
||||
- 同一类型的所有对象共享同一份静态数据
|
||||
|
||||
通常用法:
|
||||
PI之类的全局且唯一性的
|
||||
|
||||
语法:
|
||||
static 变量名 = XXX;
|
||||
- 记录全局共享状态
|
||||
- 写工具方法
|
||||
- 定义不会因对象不同而变化的数据
|
||||
|
||||
案例:
|
||||
```Csharp
|
||||
class Test
|
||||
```csharp
|
||||
class Player
|
||||
{
|
||||
static public float PI = 3.1415926; //静态成员
|
||||
public int testInt = 100;
|
||||
|
||||
public static float CalcCircle(float r) //静态方法
|
||||
public static int Count;
|
||||
public string Name;
|
||||
|
||||
public Player(string name)
|
||||
{
|
||||
return PI * r;
|
||||
Name = name;
|
||||
Count++;
|
||||
}
|
||||
|
||||
public void TestFunc() //非静态方法
|
||||
|
||||
public static void PrintCount()
|
||||
{
|
||||
Console.WriteLine("123");
|
||||
Console.WriteLine(Count);
|
||||
}
|
||||
}
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine(Test.PI);
|
||||
Console.WriteLine(Test.CalcCircle(2));
|
||||
}
|
||||
Player p1 = new Player("A");
|
||||
Player p2 = new Player("B");
|
||||
Player.PrintCount(); // 2
|
||||
```
|
||||
|
||||
注意:
|
||||
和程序同生共死,在程序使用后永远不会清除内存,直到程序结束
|
||||
非静态函数可以调用静态成员
|
||||
静态成员声明后可以不赋初始值
|
||||
静态方法中不能使用==没有实例化的==非静态成员
|
||||
1. ==静态成员属于类,不属于对象==
|
||||
2. 静态方法里不能直接访问实例成员,因为它没有 `this`
|
||||
3. 实例方法里可以访问静态成员
|
||||
4. 静态字段通常会随着类型存在而存在;在大多数日常程序里,可以近似理解为“程序结束前一直都在”
|
||||
5. 静态成员不是“永远不释放”的绝对规则,别把它和 GC 机制混为一谈
|
||||
|
||||
[[常量|const]] 和 `static readonly`:
|
||||
共同点:
|
||||
- 都常用来表示“不希望随便改”的值
|
||||
|
||||
[[常量]]可以理解为特殊的静态
|
||||
共同点
|
||||
- 都可以通过类名点出来使用
|
||||
不同点
|
||||
- const必须初始化,不能修改 static 没有这个限制
|
||||
- const值能修饰变量、static可以修饰很多
|
||||
- const一定是写在访问修饰符后面的,static没有这个要求
|
||||
区别:
|
||||
1. `const`
|
||||
- 必须声明时初始化
|
||||
- 编译期常量
|
||||
- 隐式就是静态语义
|
||||
2. `static readonly`
|
||||
- 可以声明时赋值,也可以在静态构造函数中赋值
|
||||
- 运行期确定
|
||||
- 更适合保存复杂初始化结果
|
||||
|
||||
例子:
|
||||
```csharp
|
||||
class MathInfo
|
||||
{
|
||||
public const float Pi = 3.1415926f;
|
||||
public static readonly DateTime StartTime = DateTime.Now;
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user