C# 面向对象编程概念总结
本文总结了 C# 中的几个重要面向对象编程概念,包括普通类、抽象类、普通方法、抽象方法、虚方法、重写方法、接口等,帮助更好地理解它们的适用场景及用法。
1. 普通类(Class)
普通类是 C# 中最基础的类,用于创建对象和定义对象的属性、方法。普通类可以被实例化(使用 new
关键字),包含成员变量、方法、构造函数等,适用于描述具体的实体。
示例代码:
public class Animal
{
public string Name { get; set; }
public void Speak()
{
Console.WriteLine($"{Name} is speaking.");
}
}
使用场景:适用于描述具体对象的特性和行为。例如,定义 Animal 类,描述动物的名称、行为。
2. 抽象类(Abstract Class)
抽象类是一个不能直接实例化的类,通常用于定义一组通用属性和方法(包括抽象方法和虚方法),并在派生类中具体实现。抽象类可以包含已实现的方法和未实现的抽象方法。
示例代码:
public abstract class Shape
{
public string Color { get; set; }
public abstract double CalculateArea();
}
使用场景:适用于定义通用特征和行为,供不同派生类实现。例如,Shape 类作为所有形状的抽象类,不同形状(如圆形、矩形)具体实现面积计算。
3. 普通方法(Regular Method)
普通方法是类中默认的非虚方法,可以直接被调用,且在派生类中无需重写。普通方法在编译时被确定,不支持多态。
示例代码:
public class Car
{
public void StartEngine()
{
Console.WriteLine("Engine started.");
}
}
使用场景:适用于不需要在派生类中重写的方法,实现类的基础功能。
4. 抽象方法(Abstract Method)
抽象方法只能在抽象类中声明,且没有方法体(实现)。派生类必须重写抽象方法以实现具体功能。抽象方法定义的行为需在不同派生类中有不同实现。
public abstract class Animal
{
public abstract void MakeSound();
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
}
使用场景:适用于描述必须在派生类中实现的功能。例如 MakeSound 方法,要求不同动物有不同的叫声。
5.虚方法(Virtual Method)
虚方法是一种可被重写的方法,它有默认的实现,但允许派生类选择性地重写它。虚方法允许实现多态(polymorphism)。
public class Animal
{
public virtual void Move()
{
Console.WriteLine("The animal moves.");
}
}
public class Bird : Animal
{
public override void Move()
{
Console.WriteLine("The bird flies.");
}
}
使用场景:适用于希望在派生类中重写,但不强制要求重写的方法。
6.重写方法(Override Method)
重写方法用于在派生类中对基类虚方法或抽象方法进行重写,以实现具体行为。重写方法需要用 override
关键字,并且方法签名需与基类一致。
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Meow");
}
}
使用场景:适用于在派生类中提供基类方法的具体实现。
7. 接口(Interface)
接口定义了一组方法和属性的规范,但不包含实现。类可以实现一个或多个接口(多继承),从而保证实现接口所定义的所有成员。接口可以被实现类在任意层级实现,打破了类的单一继承限制。
public interface IFlyable
{
void Fly();
}
public class Bird : IFlyable
{
public void Fly()
{
Console.WriteLine("Bird is flying.");
}
}
使用场景:适用于定义行为契约,实现解耦和灵活性。例如,IFlyable 接口用于所有可以飞的类,实现飞行功能。
概念 | 是否可实例化 | 是否可继承 | 是否必须重写 | 是否有方法实现 | 是否多继承 |
---|---|---|---|---|---|
普通类(Class) | 是 | 是 | 否 | 是 | 否 |
抽象类(Abstract Class) | 否 | 是 | 抽象方法必须重写 | 是,部分实现 | 否 |
接口(Interface) | 否 | 否,需实现 | 是 | 否 | 是 |