C# --- 深入学习类(class)
类是面向对象编程(OOP)的核心概念之一,它允许用户定义自己的数据类型,并为这些数据类型指定属性和行为。类是一种引用类型,这意味着类实例(对象)存储在堆内存中,并通过引用进行访问。
4.1 主要特点
4.1.1 引用类型:类的实例存储在堆内存中,变量保存的是对象的引用(内存地址),而不是对象本身。
4.1.2 封装:类可以封装数据(属性)和操作数据的方法(行为)。
4.1.3 继承:类支持继承,允许创建新的类从现有的类继承属性和行为。
4.1.4 多态:通过继承和接口实现多态性。
4.1.5 构造函数:类可以有一个或多个构造函数,用于在创建对象时初始化对象。
4.2 定义和使用类
4.2.1 定义类
一个简单的类的定义包括属性、方法和构造函数:
public class Person
{// 属性public string Name { get; set; }public int Age { get; set; }// 构造函数public Person(string name, int age){Name = name;Age = age;}// 方法public void DisplayInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}
}
4.2.2 使用类
创建类的实例(对象)并调用其方法:
public class Program
{public static void Main(){// 创建类的实例Person person = new Person("Alice", 30);// 调用方法person.DisplayInfo(); // 输出: Name: Alice, Age: 30}
}
4.3 类的主要特性
4.3.1 引用类型
> 类的实例存储在堆内存中。
> 变量保存的是对象的引用(内存地址)。
> 赋值一个类对象变量给另一个变量时,两个变量引用同一个对象
Person person1 = new Person("Alice", 30);
Person person2 = person1;
person2.Name = "Bob";
Console.WriteLine(person1.Name); // 输出: Bob\
4.3.2 封装(Encapsulation)
> 通过属性和方法封装数据和行为。
> 使用访问修饰符(如 public、private、protected)控制对类成员的访问。
public class Person
{private string name;public string Name{get { return name; }set { name = value; }}public void DisplayInfo(){Console.WriteLine($"Name: {Name}");}
}public class Program
{public static void Main(){Person person = new Person();person.Name = "Alice"; // 通过属性设置 nameperson.DisplayInfo(); // 输出: Name: Alice}
}
4.3.3 继承(Inheritance)
> 通过继承实现代码重用和扩展。
> 派生类继承基类的属性和方法,并可以添加新的成员或重写基类成员。
public class Person
{public string Name { get; set; }public int Age { get; set; }public Person(string name, int age){Name = name;Age = age;}public void DisplayInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}
}public class Employee : Person
{public int EmployeeId { get; set; }public Employee(string name, int age, int employeeId) : base(name, age){EmployeeId = employeeId;}public void DisplayEmployeeInfo(){DisplayInfo();Console.WriteLine($"Employee ID: {EmployeeId}");}}public class Program
{public static void Main(){Employee employee = new Employee("Alice", 30, 1234);employee.DisplayEmployeeInfo(); // 输出: Name: Alice, Age: 30; Employee ID: 1234}
}
4.3.4 多态(Polymorphism)
> 通过继承和接口实现多态性。相同的方法调用可以有不同的行为。
public class Person
{public string Name { get; set; }public int Age { get; set; }public Person(string name, int age){Name = name;Age = age;}public void DisplayInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}
}public class Employee : Person
{public int EmployeeId { get; set; }public Employee(string name, int age, int employeeId) : base(name, age){EmployeeId = employeeId;}public void DisplayEmployeeInfo(){DisplayInfo();Console.WriteLine($"Employee ID: {EmployeeId}");}
}public class Program
{public static void Main(){Employee employee = new Employee("Alice", 30, 1234);employee.DisplayEmployeeInfo(); // 输出: Name: Alice, Age: 30; Employee ID: 1234}
}
4.3.5 抽象(Abstraction)
抽象是将对象的复杂性隐藏起来,只向外界公开必要的部分。抽象类和接口是实现抽象的两种方式。
public abstract class Shape
{public abstract double GetArea(); // 抽象方法,没有实现
}public class Circle : Shape
{public double Radius { get; set; }public Circle(double radius){Radius = radius;}public override double GetArea(){return Math.PI * Radius * Radius;}
}public class Program
{public static void Main(){Shape myCircle = new Circle(5);Console.WriteLine("Area: " + myCircle.GetArea()); // 输出: Area: 78.53981633974483}
}
