类 -(中篇)
掌握属性封装的实现
掌握构造函数重载
理解静态成员的概念与用法
核心讲解
(1)属性(Property)
封装字段,对外提供访问入口,是 C# 的最佳实践,替代公有字段。
get访问器:读取值set访问器:写入值,value 关键字代表传入的值可以加访问修饰符,控制读写权限
自动属性:
{ get; set; },编译器自动生成后台字段
(2)封装的好处
控制读写权限(只读、只写、读写)
可以在 set 里加数据校验
内部实现修改不影响外部调用
(3)构造函数重载
同一个类可以有多个构造函数,参数不同(个数、类型、顺序)。
构造函数可以用
:this()调用本类其他构造减少代码重复
(4)静态成员 static
属于类本身,不属于具体对象,所有对象共享一份。
静态字段、静态方法、静态构造函数
静态方法只能访问静态成员,不能直接访问实例成员
调用方式:
类名.静态成员适合:工具方法、全局计数、配置
操作步骤
改造 Student 类,用属性封装字段
重载构造函数
添加静态成员和静态方法
运行验证
代码示例
public class Student
{
// 私有字段
private string _name;
private int _age;
// 完整属性
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set
{
// 数据校验
if (value < 0 || value > 120)
Console.WriteLine("年龄不合法");
else
_age = value;
}
}
// 自动属性(最常用)
public string Major { get; set; }
// 静态字段:所有对象共享
public static string School { get; set; } = "XX大学";
// 无参构造
public Student()
{
}
// 构造函数重载,调用上面的无参构造
public Student(string name, int age) : this()
{
Name = name;
Age = age;
}
// 实例方法
public void Introduce()
{
Console.WriteLine($"我是{Name},{Age}岁,{School}的学生");
}
// 静态方法
public static void PrintSchool()
{
Console.WriteLine("学校:" + School);
// Console.WriteLine(Name); // 报错,静态方法不能访问实例成员
}
}
// Program.cs
// 访问静态成员,不用实例化
Student.School = "清华大学";
Student.PrintSchool();
Student s1 = new Student("张三", 20);
s1.Major = "计算机";
s1.Introduce();
Student s2 = new Student("李四", 19);
s2.Introduce();
Console.ReadKey();
常见误区
属性和字段分不清:属性是方法,字段是变量;属性一般大写,字段小写
set 里不用 value:set 访问器里 value 是关键字,代表传入的值,不用自己定义
实例方法调用静态成员:可以,静态方法不能调用实例成员
静态类用实例调用:静态成员必须用类名调用,不要用对象调用
课后练习
定义一个
Product类,私有字段:_name、_price封装成属性,价格加校验(不能小于 0)
自动属性:库存数量
添加静态字段
Category,静态方法打印分类创建对象测试封装和校验
