一、类(Class)是什么?
在生活中:
类是事物的抽象。比如:人类、鸟类都是事物的抽象。
类用来描述一类事物的共性。也就是事物的特征(属性)和行为(方法)
在面向对象编程中:
类是定义对象属性和方法的模板。
类是一个抽象的概念,它描述了具有相同属性和方法的对象的集合。
类是一种数据类型。
二、对象是什么
对象(Object):根据类创建的具体实例。它包含了类定义的属性和方法的具体值。比如:
小花是一只具体的猫对象。
张三是一个具体的人对象。
李四也是一个具体的人对象。
三、声明类的语法
一个典型的类通常由以下四种成员组成:
字段(Field)
属性(Property)
方法(Method)
构造函数(Constructor)
这些成员共同定义类类的特征和行为。不同类型的成员在面向对象编程中承担不同的角色,这些成员共同构建了类的结构和功能,使其具有自己的特性和行为。
1. 声明类的完整语法
[访问修饰符] [类修饰符] class 类名 [: 基类] [, 接口列表]
{
//字段
//属性成员
//方法成员
//构造函数
}示例
public class Person
{
// 字段
private string name;
private int age;
// 属性
public string Name { get; set; }
public int Age { get; set; }
// 构造函数
public Person()
{
Name = "未知";
Age = 0;
Console.WriteLine("一个人诞生了");
}
//方法,打印信息
public void DisplayInfo()
{
Console.WriteLine($"姓名: {Name}");
Console.WriteLine($"年龄: {Age}");
}
}Person是类名称,按照约定通常使用帕斯卡命名法(首字母大写)。
大括号中包含了类的成员:字段、属性、方法、构造函数。
2. 声明类的基本语法
class 类名
{
// 声明字段
[访问修饰符] 数据类型 字段名;
}类名的命名方法
帕斯卡命名法:类名通常使用帕斯卡命名法:每个单词的首字母大写,其他小写。例如GetInfo等
语义化:类名应该具有描述性,以便在不查看类的定义的情况下也可以理解它的用途,避免使用单个字符或不具有描述性的类名。
名词化:如果类是具体的类型,类名通常使用名词,反映实际世界中的对象。
示例: 声明一个Person类
class Cat
{
// 声明字段
private string name;
private int age;
}三、创建对象的语法
类名 对象名 = new 类的同名构造函数名();示例:
Cat cat1 = new Cat(); 运行结果:
一只猫出生了!这里有几个关键点:
Cat: 是数据类型。
cat1:变量名,表示一个Cat类型的对象。
new关键字:表示在内存中“新建一个对象”。Cat():调用的是构造函数在 C# 中,构造函数的名字必须和类名相同。如果你没写构造函数,C# 会自动提供一个默认的无参构造函数。
四、给字段赋值的语法:
对象名.字段名 = 值;示例
cat1.name = "小小";
cat1.age = 3;五、访问修饰符
声明类的基本语法
[访问修饰符] class 类名
{
// 声明字段
[访问修饰符] 数据类型 字段名;
}[访问修饰符] :控制类的可访问性。
Public:表示类是公共的,任何地方都可访问。
internal:表示类是内部的,只有当前项目内可访问(默认)
private:表示类是私有的,包含类内可访问(仅用于嵌套类)
示例: public修饰符的用法
Lesson1(需引入Lesson2)
using Lesson2;
class Program
{
static void Main(string[] args)
{
Bird bird2 = new Bird();
}
}Lesson2
public class Bird
{
public string _birdName;
public int _birdAge;
}
class Program
{
static void Main(string[] args)
{
Bird bird1 = new Bird();
}
}示例:private的用法
class Bird
{
public string birdName;
public int birdAge;
}
class Program
{
//private是嵌套类修饰符,不能用于顶级
private class Person
{
public string personName;
public int personAge;
}
static void Main(string[] args)
{
Person p1 = new Person();
p1.personName = "张三";
p1.personAge = 10;
Bird bird1 = new Bird();
}
}六、字段是什么
字段是类中变量;
字段用于存储状态数据。
字段表示对象的状态。
public class Person
{
// 字段 - 存储对象的数据
private string name; // 存储姓名
private int age; // 存储年龄
private string email; // 存储邮箱
}七、状态数据是什么
状态就是对象在某个时刻的"样子"或"情况"。
状态数据就是对象在某个时刻的"数据样子"或“数据情况”。
状态数据强调变量中的数据会随着时间改变的数据。
状态决定行为
八、声明字段的语法
基本语法格式
[访问修饰符] [数据类型] [字段名称] [= 初始值];具体示例
public class Student
{
// 私有字段(只能在类内部访问)
private string studentId;
private string name;
private int age;
private List<string> courses;
// 公有字段(不推荐,但需要了解)
public string schoolName;
// 带初始值的字段
private bool isGraduated = false;
private DateTime createdDate = DateTime.Now;
// 只读字段(只能在声明时或构造函数中赋值)
private readonly string country = "中国";
// 常量字段(编译时常量)
public const int MaxCourseCount = 10;
}九、字段初始化的规则
public class MyClass
{
// 未初始化 - 使用默认值(0)
private int count;
// 显式初始化 - 推荐做法
private string name = "Unknown";
// readonly字段 - 必须初始化
private readonly DateTime createdDate = DateTime.Now;
// const字段 - 必须在声明时初始化
private const int MaxSize = 100;
// 在构造函数中初始化
public MyClass()
{
// 可以在这里初始化字段
count = 0;
// createdDate 如果未在声明处初始化,必须在这里初始化
}
}声明时初始化:
适用于大多数情况,特别是当初始值不依赖于构造函数参数或外部因素时。
可以使代码更简洁,直接看到字段的初始值。
如果多个构造函数都有相同的初始值,那么在声明时初始化可以避免在每个构造函数中重复赋值。
构造函数中初始化:
当初始值依赖于构造函数参数或其他运行时条件时,必须在构造函数中初始化。
当有多个构造函数且每个构造函数需要不同的初始值时,需要在各自的构造函数中初始化。
同时使用:有时,我们会在声明时给一个默认值,然后在构造函数中根据条件修改它。这通常用于当默认值在大多数情况下适用,但某些情况下需要改变。
只读字段:对于
readonly字段,如果不在声明时初始化,则必须在构造函数中初始化。
十、字段命名规范
字段名称: 通常使用 camelCase 命名;
public class NamingExample
{
// ✅ 好的命名
private string firstName;
private int studentAge;
private decimal accountBalance;
private bool isActive;
private DateTime createdDate;
// ❌ 不好的命名
private string n; // 太简单
private int a; // 无意义
private bool flag; // 不明确
private string str; // 类型作为名称
}练习
题目 1:创建学生类
要求:1. 创建一个 Student 类,包含以下字段;2. 然后创建几个学生对象并给字段赋值。
题目 2:创建图书类
要求:1. 创建一个 Book 类,包含以下字段;2. 创建几本图书对象并赋值。
题目 3:创建汽车类
要求:1. 创建一个 Car 类,包含以下字段;2.创建几个汽车对象并赋值。
题目 4:创建手机类
要求:1. 创建一个 Phone 类,包含以下字段; 2.创建几个手机对象并赋值。
题目 5:创建游戏角色类
要求:1. 创建一个 GameCharacter 类,包含以下字段; 2.创建几个游戏角色对象并赋值。