-
类的定义与对象的创建
类的定义与对象的创建
-
类的概念
类是面向对象编程(OOP)的核心,是对现实事物的抽象描述(如“人”“汽车”)。它包含两部分:
属性:事物的特征(如人的姓名、年龄);
方法:事物的行为(如人说话、走路)。
类是模板,对象是类的实例(如“张三”是“人”类vb.net教程C#教程python教程SQL教程access 2010教程的一个实例)。 -
类的定义
语法格式
csharp
访问修饰符 class 类名
{
// 字段(存储数据)
// 属性(封装字段,控制访问)
// 方法(实现行为)
}
实例:定义Person类
csharp
using System;
// 定义公共类Person
public class Person
{
// 私有字段:存储姓名(仅类内部可访问)
private string _name;
// 私有字段:存储年龄
private int _age;
// 公共属性:封装_name字段(外部可读写)
public string Name
{
get { return _name; } // 获取字段值
set { _name = value; } // 设置字段值(value是关键字,表示外部传入的值)
}
// 公共属性:封装_age字段(外部可读写,且添加年龄合法性校验)
public int Age
{
get { return _age; }
set
{
if (value >= 0 && value <= 120) // 年龄范围校验
_age = value;
else
Console.WriteLine("年龄输入无效!");
}
}
// 公共方法:实现“说话”行为
public void SayHello()
{
Console.WriteLine($"大家好,我是{_name},今年{_age}岁。");
}
}
逐行讲解:
public class Person:public表示类可被外部访问;class是定义类的关键字;Person是类名(遵循Pascal命名法:首字母大写)。
private string _name:private表示字段仅类内部可访问;_name是字段名(遵循驼峰命名法:首字母小写,前缀下划线区分字段与属性)。
public string Name:public属性,外部可通过Name访问_name字段。
oget:返回字段值(外部读取时调用);
oset:设置字段值(外部赋值时调用,value是外部传入的参数)。
public int Age:属性添加合法性校验,确保年龄在0~120之间,避免非法数据。
public void SayHello():void表示方法无返回值;方法内部使用字段_name和_age输出信息。
3. 对象的创建与使用
语法格式
csharp
类名 对象名 = new 类名();
实例:创建Person对象并使用
csharp
class Program
{
static void Main(string[] args)
{
// 1. 创建Person对象(实例化)
Person person1 = new Person();
// 2. 通过属性赋值
person1.Name = "张三";
person1.Age = 25;
// 3. 调用方法
person1.SayHello(); // 输出:大家好,我是张三,今年25岁。
// 4. 创建第二个对象
Person person2 = new Person();
person2.Name = "李四";
person2.Age = 30;
person2.SayHello(); // 输出:大家好,我是李四,今年30岁。
}
}
逐行讲解:
Person person1 = new Person():new关键字用于实例化对象(分配内存空间);person1是对象名(引用变量,指向堆中的对象实例)。
person1.Name = "张三":通过属性Name给字段_name赋值(调用set方法)。
person1.SayHello():调用对象的方法,执行方法内的逻辑。
每个对象是独立的实例,修改person2的属性不会影响person1。
4. 基础知识拓展
4.1 封装:数据保护的核心
封装是OOP三大特性之一,通过访问修饰符控制类成员的可见性,保护数据不被非法修改:
public:所有类可访问(对外暴露的接口);
private:仅当前类可访问(内部数据存储);
protected:当前类及子类可访问;
internal:同一程序集内可访问。
为什么用属性而非public字段?
直接用public string Name会让外部随意修改数据(如赋值为null或空字符串),而属性通过set方法可添加校验逻辑(如年龄范围),确保数据合法性。
4.2 构造函数:对象初始化的快捷方式
构造函数是特殊方法,用于对象创建时初始化字段,命名与类名一致,无返回值:
默认构造函数:无参数,若类未定义构造函数,编译器自动生成;
自定义构造函数:带参数,可直接赋值字段。
实例:添加自定义构造函数
csharp
public class Person
{
private string _name;
private int _age;
// 自定义构造函数(带参数)
public Person(string name, int age)
{
_name = name;
_age = age;
}
// 无参构造函数(需显式定义,否则编译器不再生成默认构造函数)
public Person() {}
// 属性和方法不变...
}
// 使用自定义构造函数创建对象
Person p = new Person("王五", 28);
p.SayHello(); // 输出:大家好,我是王五,今年28岁。
讲解:
自定义构造函数让对象创建时直接完成初始化,避免多次赋值;
若定义了带参构造函数,需显式添加无参构造函数(否则无法用new Person()创建对象)。
4.3 this关键字:区分字段与参数
当构造函数参数名与字段名相同时,用this关键字指代当前对象的字段:
csharp
public Person(string name, int age)
{
this._name = name; // this._name表示当前对象的字段
this._age = age;
}
-
核心总结
类:抽象的模板,包含字段(数据)、属性(封装)、方法(行为);
对象:类的实例,通过new关键字创建;
封装:用访问修饰符保护数据,属性是对外暴露的安全接口;
构造函数:快速初始化对象,命名与类名一致。
通过类与对象,C#实现了对现实世界的抽象建模,是编写大型程序的基础。
练习:定义Car类(包含品牌、颜色字段,Run()方法),创建对象并调用方法,添加带参数的构造函数。
csharp
// 参考答案
public class Car
{
private string _brand;
private string _color;
public Car(string brand, string color)
{
_brand = brand;
_color = color;
}
public void Run()
{
Console.WriteLine($"{_color}的{_brand}正在行驶...");
}
}
// 调用
Car myCar = new Car("Tesla", "红色");
myCar.Run(); // 输出:红色的Tesla正在行驶...
本站原创,转载请注明出处:










