系列目录
面向对象编程(OOP)是C#的核心理念,它通过类和对象来组织代码,使程序更加模块化、可维护和可扩展。OOP的四大基本特性——封装、继承、多态和抽象——为代码的设计和实现提供了强大的支持。在本节中,将深入探讨这些概念,包括如何定义类与对象、实现继承和多态、以及使用抽象类和接口。掌握这些基本特性是构建复杂、功能丰富的应用程序的基础。
类与对象
类是定义对象的蓝图或模板,它描述了一类对象的属性和行为。类中包含字段、属性、方法和事件。对象是类的实例,通过‘new‘关键字创建。
定义类
public class Person
{
// 字段
private string name;
private int age;
// 属性
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
// 方法
public void Introduce()
{
Console.WriteLine("Hello, my name is " + name + " and I am " + age + " years old.");
}
}
创建对象
public class Program
{
public static void Main(string[] args)
{
// 创建Person类的实例
Person person = new Person();
person.Name = "Alice";
person.Age = 30;
person.Introduce(); // 输出: Hello, my name is Alice and I am 30 years old.
}
}
在这个示例中,‘Person‘类定义了一个人的基本属性和行为,通过创建‘Person‘类的实例并调用其方法来实现功能。
继承与多态
继承
继承是指一个类可以从另一个类继承属性和方法。基类(父类)中的成员可以在派生类(子类)中使用。继承通过‘:‘符号实现。
定义基类和派生类
public class Animal
{
public string Name { get; set; }
public void Speak()
{
Console.WriteLine(Name + " makes a sound.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine(Name + " barks.");
}
}
使用继承
public class Program
{
public static void Main(string[] args)
{
Dog dog = new Dog();
dog.Name = "Buddy";
dog.Speak(); // 输出: Buddy makes a sound.
dog.Bark(); // 输出: Buddy barks.
}
}
在这个示例中,‘Dog‘类继承了‘Animal‘类的属性和方法,并添加了自己的方法‘Bark‘。
多态
多态是指在不同情境下调用同一方法时表现出不同的行为。多态通过方法重写和接口实现。
方法重写
public class Animal
{
public string Name { get; set; }
public virtual void Speak()
{
Console.WriteLine(Name + " makes a sound.");
}
}
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine(Name + " barks.");
}
}
使用多态
public class Program
{
public static void Main(string[] args)
{
Animal animal = new Dog();
animal.Name = "Buddy";
animal.Speak(); // 输出: Buddy barks.
}
}
在这个示例中,通过方法重写,实现了‘Dog‘类对‘Speak‘方法的多态行为。
抽象类与接口
抽象类
抽象类是不能被实例化的类,只能被继承。抽象类中可以包含抽象方法,这些方法必须在派生类中实现。
定义抽象类
public abstract class Shape
{
public abstract double GetArea();
}
public class Circle : Shape
{
public double Radius { get; set; }
public override double GetArea()
{
return Math.PI * Radius * Radius;
}
}
使用抽象类
public class Program
{
public static void Main(string[] args)
{
Circle circle = new Circle();
circle.Radius = 5;
Console.WriteLine("Area of the circle: " + circle.GetArea()); // 输出: Area of the circle: 78.53981633974483
}
}
在这个示例中,‘Shape‘是一个抽象类,包含一个抽象方法‘GetArea‘,该方法在派生类‘Circle‘中实现。
接口
接口定义了一组方法和属性,但不提供实现。类可以实现一个或多个接口。
定义接口
public interface IMovable
{
void Move();
}
public class Car : IMovable
{
public void Move()
{
Console.WriteLine("The car is moving.");
}
}
使用接口
public class Program
{
public static void Main(string[] args)
{
IMovable movable = new Car();
movable.Move(); // 输出: The car is moving.
}
}
在这个示例中,‘IMovable‘接口定义了‘Move‘方法,‘Car‘类实现了该接口并提供了具体实现。
总结
通过掌握面向对象编程的核心概念——类与对象、继承与多态、抽象类与接口——可以创建结构化、灵活且易于维护的C#程序。这些知识使程序能够重用和扩展已有代码,同时提高代码的可读性和管理性。在后续章节中,将进一步探讨C#的高级特性和编程技巧,帮助您更好地应用这些面向对象的原则。
下一篇:白骑士的C#教学进阶篇 2.2 集合与泛型