1. 对象字段:对象用来存自己数据的地方
在C#(其实大多数编程语言都这样)经常说:“一切皆对象”。对象就是内存里的一个“虚拟物品”,它能存点东西(数据),还能做点事(方法)。换句话说,对象有状态(字段、数据)和行为(方法)。
对象的例子:
- 游戏里的猫(Cat)
- 网站用户(User)
- 图书馆的书(Book)
- 停车场的车(Car)
你创建对象的时候——就像复制了一个模板(类),每个副本都能用自己的数据。
字段——就是“藏在”对象里的变量,用来存它自己的数据。
生活中的例子
每只猫都有名字、年龄、颜色。这些数据都是独立的——每只猫都不一样。
public class Cat
{
public string Name; // 猫的名字——对象字段
public int Age; // 猫的年龄——对象字段
public string Color; // 猫的颜色——对象字段
}
当我们创建对象时:
Cat cat1 = new Cat();
cat1.Name = "巴尔西克";
cat1.Age = 2;
cat1.Color = "灰色";
Cat cat2 = new Cat();
cat2.Name = "穆尔卡";
cat2.Age = 5;
cat2.Color = "黑色";
每个对象都有自己的字段值!
| 对象 | Name | Age | Color |
|---|---|---|---|
| cat1 | 巴尔西克 | 2 | 灰色 |
| cat2 | 穆尔卡 | 5 | 黑色 |
字段——就是对象里的“小口袋”,它能往里面塞点东西。
2. 对象方法:对象能干啥
方法——就是对象的“动作”、“技能”或者“函数”。方法就是一段可以被对象“调用”的代码。
生活中的例子
猫有动作:它会喵喵叫,会跑,会吃饭。
public class Cat
{
public string Name;
public void Meow()
{
Console.WriteLine($"{Name} 说:喵!");
}
public void Sleep()
{
Console.WriteLine($"{Name} 在睡觉。");
}
}
用法:
Cat cat1 = new Cat();
cat1.Name = "巴尔西克";
cat1.Meow(); // 巴尔西克 说:喵!
cat1.Sleep(); // 巴尔西克 在睡觉。
每个对象都有自己的方法,而且它们用的是自己的字段!
3. 静态字段(static fields):共享数据
有时候你想在字段里存的不是对象自己的数据,而是整个类都共享的信息。比如,统计一共创建了多少只猫,或者给所有猫设一个“最大音量”。
这时候C#里就用静态字段——用static关键字声明。
public class Cat
{
public string Name;
public static int Count = 0; // 静态字段
public Cat(string name)
{
Name = name;
Count++; // 增加猫的总数
}
}
//和Cat类打交道
Cat c1 = new Cat("巴尔西克");
Cat c2 = new Cat("穆尔卡");
Console.WriteLine(Cat.Count); // 2 —— 所有对象共享
静态字段是整个类唯一的,所有对象都“共享”它。
一般用类名来访问:Cat.Count。
4. 静态方法(static methods)
静态方法——就是不属于某个具体对象,而是属于整个类的方法。
- 这种方法不用创建对象就能调用。
- 在静态方法里不能访问普通(非静态)字段和方法——因为根本没有具体对象!
public class MathUtils
{
public static int Add(int a, int b)
{
return a + b;
}
}
用法:
int sum = MathUtils.Add(2, 3); // 5
静态方法经常用来写工具函数——那些和对象状态没关系的功能。
你其实已经见过很多静态方法了:
Console.WriteLine();
Console.ReadLine();
Math.Round();
Math.Truncate();
5. 字段和方法对比
| 这是什么? | 怎么声明? | 存哪? | 干啥用? | 怎么访问? |
|---|---|---|---|---|
| 对象字段 | |
每个对象里 | 对象自己的数据 | cat1.Name, cat2.Name |
| 对象方法 | |
每个对象里 | 用对象字段的动作 | cat1.Meow() |
| 静态字段 | |
整个类唯一一个 | 所有对象共享的数据 | Cat.C |
| 静态方法 | |
整个类唯一一个 | 和对象无关的“技能” | Cat.Method() |
7. 图解
普通字段和方法:
. +-----------------+
cat1: | Name = "巴尔西克" |
| Age = 2 |
+-----------------+
+------------------+
cat2: | Name = "穆尔卡" |
| Age = 5 |
+------------------+
静态字段Count:
Cat.Count = 2 // 所有猫共享的唯一一个
方法调用:
cat1.Meow(); // 巴尔西克 说:喵!
cat2.Meow(); // 穆尔卡 说:喵!
静态方法调用:
MathUtils.Add(2, 3); // 5
总结
- 字段——负责每个对象自己的属性。
- 方法——描述对象能干啥。
- 静态字段——适合存“全局”数据(比如计数器、全局设置)。
- 静态方法——用来做和具体对象没关系的操作(比如数学函数)。
8. 常见问题
能不能通过对象访问静态字段?
技术上——可以(cat1.Count),但一般都用类名(Cat.Count),这样自己和别人都不容易搞混。
能不能不创建对象就调用非静态方法?
不行,因为这种方法总是和具体对象、它的数据打交道。
静态方法里能用普通字段和方法吗?
不能——因为静态方法根本不知道该找哪个对象。
能不能做个“全静态”的类?
可以,写static class就行——这种类不能用new创建,里面所有成员都得是静态的。
GO TO FULL VERSION