====== 类的实例化 ======
实例化:把类创建为对象的过程。
===== 1. 实例化表达式 =====
==== 表达式1:直接实例化创建对象 ====
// 语法
类名称 对象名 = new 类名称();
==== 表达式2:先创建对象再实例化 ====
// 语法
类名称 变量;
变量 = new 类名称();
===== 注意事项 =====
Car myCar = new Car();
* 创建了一个名为 ''myCar'' 的变量,并将其初始化为一个新的 ''Car'' 对象。
* 这意味着 ''myCar'' 现在引用了一个实际存在的 ''Car'' 实例。
* **结论**:''myCar'' 是 ''Car'' 类的实例/对象。
> **特别提醒**:
> 如果只写 ''Car myCar;'',这仅仅声明了一个名为 ''myCar'' 的变量,但并没有给它分配任何值。在这种情况下,''myCar'' 是一个未初始化的变量(或 null),你不能直接使用它,**必须先实例化它**。
====== 为什么要创建类及对类的理解 ======
当多个对象具有相同属性时,可以把他们归于一类,即创建一个类。
* **属性**:类中包含他们相同的特征。
* **行为**:可以看做方法(函数)。
namespace 创建类及对类的理解
{
class Program
{
static void Main(string[] args)
{
// 当多个对象具有相同属性、行为时,可以把他们归于一类
// 利用同种类型创建英雄
MAX_pipou LeiShen = new MAX_pipou(); // 创建一个英雄叫雷神
MAX_pipou gaiya = new MAX_pipou(); // 创建一个英雄叫盖亚
MAX_pipou wunu = new MAX_pipou(); // 创建一个英雄叫舞女
// 英雄属性赋予
LeiShen.name = "雷神"; LeiShen.agg = 22; LeiShen.shengao = 175;
gaiya.name = "盖亚"; gaiya.agg = 25; gaiya.shengao = 182;
wunu.name = "舞女"; wunu.agg = 18; wunu.shengao = 163;
// 英雄展示
LeiShen.show_MAX_pipou();
gaiya.show_MAX_pipou();
wunu.show_MAX_pipou();
}
}
class MAX_pipou // 创建英雄的类
{
// 字段变量 等待外部赋值
// 变量不加 static 必须要实例化类才能使用
public String name; // 名
public int agg; // 年龄
public int shengao; // 身高
public void show_MAX_pipou() // 方法
{
Console.WriteLine(name);
Console.WriteLine(agg);
Console.WriteLine(shengao);
}
}
}
====== 成员变量与成员函数 ======
* **成员变量**:一个类里面的变量。
* **成员函数**:一个类里面的方法。
====== 创建类添加 static ======
类里面的变量如果添加了 ''static'' 关键字,相当于直接创建了变量。
**特点**:无需实例化即可直接访问。
namespace 创建类及对类的理解加入static
{
class Program
{
static void Main(string[] args)
{
// 直接通过 类名.属性 访问,不需要 new 对象
MAX_pipou.name = "英雄";
MAX_pipou.agg = 24;
}
}
class MAX_pipou // 创建英雄的类加 static
{
// 静态字段变量
public static String name; // 名
public static int agg; // 年龄
public static short xbie; // 性别
public static int shengao; // 身高
public static short jineng; // 技能
public static short wuqi; // 武器
public static int gongjili; // 攻击力
public void show_MAX_pipou()
{
Console.WriteLine(name);
Console.WriteLine(agg);
Console.WriteLine(shengao);
}
}
}
====== 主类与次类之间变量需要传递数据 ======
在主类中实例化次类的对象,可以通过以下方式传递数据:
- 1. 通过 **对象点 (Object.Property)** 的方式赋值。
- 2. 调用其中方法,**传入参数**。
- 3. 把一个**对象**当做参数传入。
- 4. 建议使用**委托**(Delegate)。
====== 类的绑定理解 (引用类型) ======
===== 理解 1:引用传递 =====
使用 ''fuka'' 对象就等于使用 ''zhuka'' 对象成员。
class casrd // 卡类
{
public String Money; // 卡的金额
}
class syong
{
public void syong_jilu()
{
Console.WriteLine("信用卡消费记录");
// 创建卡对象、赋予8千额度
casrd zhuka = new casrd() { Money = "8000" };
Console.WriteLine("信用卡总额度:" + zhuka.Money); // 输出主卡的总额度值
// 关键点:引用赋值
casrd fuka = zhuka; // 怎么理解这里?
fuka.Money = "2000"; // 副卡消费2千块(实际上修改的是同一个内存地址)
Console.WriteLine("消费记录:" + zhuka.Money); // 输出主卡的总额度值
}
}
**解析**:
在这段代码中,''casrd fuka = zhuka;'' 是将 ''zhuka'' 对象的**引用**(内存地址)赋值给 ''fuka''。这意味着 ''zhuka'' 和 ''fuka'' 都指向同一个 ''Card'' 对象(创建在堆内存中)。
当你修改 ''fuka'' 的属性值时,实际上是修改了 ''zhuka'' 的属性值,因为它们本质上是同一个对象。
===== 理解 2:总结 =====
{{.:pasted:20250928-162934.png?400|示意图}}
^ 类型 ^ 行为特征 ^
| **值类型** | 对一个变量的修改**不会**影响其他变量的值(复制副本)。 |
| **引用类型** | 对一个引用类型变量的值进行修改,**会影响**到与它相同引用的其他变量的值(操作同一地址)。 |