【从零开始入门unity游戏开发之——C#篇17】C#面向对象的封装——类(Class)和对象、成员变量和访问修饰符、成员方法
文章目录
- 一、类和对象
- 1、什么是类和对象?
- 2、例子说明
- 2.1 例子1:
- (1) **类的定义:**
- (2) **创建对象:**
- (3) **类和对象的关系:**
- 2.2 例子2:
- **类的比喻:**
- **对象的比喻:**
- 代码实例:
- 3、总结:
- 二、成员变量(字段)和访问修饰符
- 1、成员变量(字段)
- 什么是成员变量?
- 成员变量语法结构
- 示例:
- 成员变量默认值
- 成员变量的访问
- 2、访问修饰符
- 2.1 几种访问修饰符
- (1) `public`
- (2) `private`
- (3) `protected`
- (4) `internal`
- (5) `protected internal`
- (6) `private protected`
- 2.2 默认访问修饰符
- 2.3 访问修饰符的总结:
- 2.4 访问修饰符总结
- 3、普通变量
- 三、成员变量和普通变量
- 1、**成员变量**(Field)
- 示例:成员变量
- 2、**普通变量**(Local Variable)
- 示例:普通变量
- 3、**成员变量与普通变量的关系与区别**
- 4、总结:
- 四、成员方法
- 定义简单的成员方法
- 专栏推荐
- 完结
一、类和对象
类和之前学的结构体类似
1、什么是类和对象?
在 C# 中,类(Class)
是一个模板或者蓝图,用来描述一种事物的属性和行为。而对象(Object)
是根据类创建出来的具体实例。你可以把类
想象成一个设计图
,而对象
则是根据这个设计图建造出来的具体物品
。
2、例子说明
2.1 例子1:
假设你有一个“车”的类。这个类可以包含“车”的一些属性(比如颜色、品牌)和行为(比如启动、刹车)。但这只是设计图,你没有实际的车。然后,你可以根据这个设计图制造具体的汽车(对象),例如一辆红色的奔驰车,一辆黑色的宝马车,等等。
(1) 类的定义:
你可以这样定义一个“车”的类:
class Car
{
// 类定义的内容
}
这个类是一个模板,但它没有包含任何具体的属性或者行为,只是一个空的框架。
(2) 创建对象:
假设你想根据这个“车”类创建一辆具体的车,比如红色的奔驰。你就可以通过类来实例化一个对象:
Car myCar = new Car();
这里,myCar
就是一个对象,它是根据 Car
类创建的实例。通过 new
关键字,C# 会在内存中创建一个 Car
类的实例。
(3) 类和对象的关系:
Car
是类,是一种“抽象的东西”。myCar
是对象,是一个“具体的东西”,它实际存在。
2.2 例子2:
类的比喻:
假设你设计了一个“人”的类(Person)。这个类会告诉你一个人应该有什么样的属性(例如姓名、年龄),应该做什么样的事(例如走路、吃饭)。但是“人”这个类本身,并不代表任何具体的人。
对象的比喻:
你根据这个“人”类,创建了一个叫做“张三”的对象。这个张三有自己的名字、年龄等具体信息。
代码实例:
假设我们有一个简单的类 Person
,它描述了一个人的基本属性:
class Person
{
public string Name;
public int Age;
}
这个 Person
类是一个模板,描述了所有人的共有属性:姓名(Name
)和年龄(Age
)。但它并没有表示任何具体的“人”。
然后,你可以使用这个模板创建具体的人对象:
Person person1 = new Person();
person1.Name = "张三";
person1.Age = 25;
Person person2 = new Person();
person2.Name = "李四";
person2.Age = 30;
在上面的代码中:
person1
和person2
是两个对象,它们是根据Person
类创建的实例。person1
代表一个具体的人(张三),有姓名和年龄。person2
代表另一个具体的人(李四),也有姓名和年龄。
3、总结:
- 类 是一个模板或者蓝图,用来描述事物的属性和行为。
- 对象 是根据类创建出来的具体实例,实际存在。
类是用来描述事物的一般特征和行为,而对象是类的具体体现。
二、成员变量(字段)和访问修饰符
成员变量(字段)和之前学的变量类似
1、成员变量(字段)
什么是成员变量?
成员变量是类(class)
或结构体(struct)
中的变量,它用于存储对象的状态信息。成员变量是类或结构体的一部分,它定义了对象的属性。每个类或结构体的实例(对象)都有自己的成员变量,可以通过实例来访问或修改这些成员变量。
在 C# 中,成员变量通常是在类或结构体
内部声明的,但位于方法外部。成员变量可以具有不同的访问修饰符,如 private、public、protected 等,用来控制其访问权限。
成员变量语法结构
[访问修饰符] 变量类型 变量名;
示例:
public class Person
{
// 成员变量
public string Name; // 姓名
public int Age; // 年龄
}
在这个例子中,Name 和 Age 是 Person 类的成员变量。
成员变量默认值
当你在定义成员变量时,可以直接为它赋一个默认值。如果成员变量没有显式赋值,则会使用类型的默认值:
- 值类型(如 int、float) 的默认值是零(0)。
- 引用类型(如 string、object) 的默认值是 null。
public class Person
{
// 成员变量并赋予默认值
public string Name = "小明"; // 默认值为 "小明"
public int Age = 18; // 默认值为 18
}
成员变量的访问
成员变量的访问通常是通过类的实例来进行的
比如
public class Person
{
// 成员变量并赋予默认值
public string Name = "小明"; // 默认值为 "小明"
public int Age = 18; // 默认值为 18
}
class Program
{
static void Main()
{
// 创建 Person 类的实例
Person person = new Person();
// 输出对象的默认成员变量值
Console.WriteLine(person.Name); // 输出: 小明
Console.WriteLine(person.Age); // 输出: 18
}
}
2、访问修饰符
访问修饰符用于定义类成员的可访问范围。在 C# 中,主要有以下几种访问修饰符:
2.1 几种访问修饰符
(1) public
- 含义:公开的,可以被任何类或方法访问。
- 用途:适用于希望任何地方都能访问的成员。
- 示例:
public class Car
{
public string Make; // 公开字段
}
(2) private
- 含义:私有的,只有类内部的成员(方法或构造函数)可以访问。
- 用途:通常用来保护数据,避免外部直接修改。
- 示例:
public class Car
{
private int year; // 私有字段,不能在类外访问
}
(3) protected
- 含义:受保护的,可以在当前类及其派生类(子类)中访问。
- 用途:当希望子类能够访问父类的成员时使用。
- 示例:
public class Car
{
protected string model; // 受保护字段,可以在子类中访问
}
(4) internal
- 含义:内部的,只能在当前程序集中访问。类外的代码无法访问,但在同一个程序集中可以访问。
- 用途:适用于希望在当前程序集中共享成员,但不希望该成员被外部应用程序访问的情况。
- 示例:
public class Car
{
internal string LicensePlate; // 仅在同一程序集中可访问
}
(5) protected internal
- 含义:受保护的内部成员,可以在当前程序集中或派生类中访问。
- 用途:适用于希望派生类和当前程序集中的任何类都能访问成员,但外部程序集无法访问该成员的情况。
- 示例:
public class Car
{
protected internal string EngineNumber; // 派生类和同一程序集中的类可以访问
}
(6) private protected
- 含义:私有且受保护的成员,只能在当前类及其派生类(同一程序集中)中访问,其他地方无法访问。
- 用途:适用于希望成员只在当前类和派生类中访问,同时又不希望其他类访问的场景。
- 示例:
public class Car
{
private protected string Vin; // 仅在当前类和派生类中可访问
}
2.2 默认访问修饰符
-
类成员
(字段、方法等):如果没有明确指定访问修饰符,字段和方法默认是 private(对于类成员变量)和 private(对于方法),这意味着只能在类内部访问。 -
类本身
:如果没有明确指定,类默认是 internal 的,意味着类只能在同一程序集内访问。
2.3 访问修饰符的总结:
修饰符 | 含义 | 访问范围 |
---|---|---|
public | 公开,所有地方都可以访问 | 类外和类内都可以访问 |
private | 私有,类外不能访问 | 只能在定义它的类中访问 |
protected | 受保护,子类可以访问 | 当前类和派生类中访问 |
internal | 内部,仅在同一程序集内可以访问 | 同一程序集中可访问,其他程序集无法访问 |
protected internal | 受保护且内部,子类和同一程序集中的类可以访问 | 当前类、派生类和同一程序集中的类可以访问 |
private protected | 私有且受保护,只能在当前类及派生类(同一程序集)访问 | 当前类和同一程序集中的派生类可以访问,其他类无法访问 |
2.4 访问修饰符总结
public
是最宽松的访问修饰符,任何类都可以访问被标记为public
的成员。private
是最严格的访问修饰符,限制该成员只能在当前类内部访问。protected
和private protected
都允许子类访问,但private protected
限制访问范围仅限于同一程序集中的子类。internal
适用于将成员限定在同一程序集中访问,适合库开发中保护某些成员不被外部访问。
3、普通变量
普通变量是定义在方法内部的变量,用于存储方法中的临时数据。它们只在方法执行时存在,方法执行结束时就会被销毁。普通变量的作用域仅限于方法内部。
- 位置:普通变量通常定义在方法体内部。
- 生命周期:普通变量的生命周期仅限于方法调用时。在方法调用结束后,普通变量会被销毁。
- 作用范围:普通变量只能在其定义的代码块中访问,方法外部无法访问。
三、成员变量和普通变量
1、成员变量(Field)
成员变量是定义在类或结构体中的变量,用于表示类或结构体的状态。它属于类或结构体的实例(对象),或者在某些情况下属于类本身。成员变量可以用来存储类或结构体的数据。
- 位置:成员变量通常位于类的定义内部,但不在方法内。它们是类或结构体的一部分。
- 作用范围:成员变量的生命周期与类或对象的生命周期相同。它们在类的实例化时创建,在类的实例销毁时销毁。
- 修饰符:成员变量可以使用访问修饰符(如
private
、public
、protected
、internal
等)来定义其访问权限。
示例:成员变量
public class Car
{
// 这是一个成员变量
public string make; // 汽车品牌
public string model; // 汽车型号
private int year; // 汽车生产年份,私有成员变量
}
在上面的示例中,make
和 model
是 Car
类的公共成员变量,而 year
是私有成员变量。
2、普通变量(Local Variable)
普通变量是定义在方法内部的变量,用于存储方法中的临时数据。它们只在方法执行时存在,方法执行结束时就会被销毁。普通变量的作用域仅限于方法内部。
- 位置:普通变量通常定义在方法体内部。
- 生命周期:普通变量的生命周期仅限于方法调用时。在方法调用结束后,普通变量会被销毁。
- 作用范围:普通变量只能在其定义的代码块中访问,方法外部无法访问。
示例:普通变量
public class Car
{
public void Drive()
{
// 这是一个普通变量
int speed = 60; // 当前速度,只有在 Drive 方法中有效
Console.WriteLine("The car is driving at " + speed + " km/h.");
}
}
在上面的示例中,speed
是 Drive
方法中的普通变量,方法结束后 speed
变量将不再存在。
3、成员变量与普通变量的关系与区别
特性 | 成员变量 | 普通变量 |
---|---|---|
定义位置 | 类或结构体中(方法外部) | 方法内部 |
生命周期 | 与类或结构体的实例相关,通常在对象生命周期内有效 | 仅在方法调用时有效,方法结束即销毁 |
作用范围 | 类的实例范围内(或类范围内) | 方法内部 |
访问权限 | 可以使用访问修饰符来控制(如 private , public , 等) | 通常不受访问修饰符控制 |
初始化 | 通常会在类实例化时初始化,除非有默认值 | 必须在方法中初始化后使用 |
存储位置 | 存储在堆中(对象实例),或者静态字段存储在类的静态区域 | 存储在栈中 |
4、总结:
- 成员变量是属于类或结构体的变量,定义在类体内,用来描述类的状态或特征。
- 普通变量是定义在方法中的变量,仅在方法调用期间有效,用来存储临时数据。
- 两者的生命周期、作用范围、访问权限等有显著差异。
四、成员方法
在 C# 中,成员方法(或称为类方法)是定义在类内部的方法,用于执行类的某些操作或提供类的功能。成员方法可以访问类的成员变量,并且可以被类的实例调用。方法有时会有输入参数、返回类型以及访问修饰符,用来控制访问权限。
定义简单的成员方法
成员方法通常是在类或结构体内部定义的。方法定义包括方法的名称、返回类型、参数列表和方法体。
public class MyClass
{
// 成员方法
public void Greet()
{
Console.WriteLine("Hello, welcome to C#!");
}
}
在上面的例子中,Greet
是 MyClass
类的一个成员方法。它没有返回值(void
)且不接受任何参数。
成员方法其实和之前学的函数(方法)其实是一样的,这里就不再重新介绍了,不懂得小伙伴可以回头再去巩固。
传送门
:
【从零开始入门unity游戏开发之——C#篇13】命名规范——驼峰命名法和帕斯卡命名法,函数(方法)的使用介绍
专栏推荐
地址 |
---|
【从零开始入门unity游戏开发之——C#篇】 |
【从零开始入门unity游戏开发之——unity篇】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架开发】 |
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~