在C#中,實(shí)現(xiàn)多態(tài)的方法主要有以下兩種:
// 定義一個(gè)接口
public interface IShape
{
double Area();
}
// 實(shí)現(xiàn)接口的類
public class Circle : IShape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public double Area()
{
return Math.PI * radius * radius;
}
}
public class Rectangle : IShape
{
private double width;
private double height;
public Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}
public double Area()
{
return width * height;
}
}
// 使用接口類型的引用來調(diào)用不同類中的方法
public class Program
{
public static void Main()
{
IShape circle = new Circle(5);
IShape rectangle = new Rectangle(4, 6);
Console.WriteLine("Circle area: " + circle.Area());
Console.WriteLine("Rectangle area: " + rectangle.Area());
}
}
// 基類
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("The animal makes a sound");
}
}
// 派生類
public class Dog : Animal
{
// 重寫基類的方法
public override void MakeSound()
{
Console.WriteLine("The dog barks");
}
}
public class Cat : Animal
{
// 重寫基類的方法
public override void MakeSound()
{
Console.WriteLine("The cat meows");
}
}
// 使用基類類型的引用來調(diào)用派生類中的方法
public class Program
{
public static void Main()
{
Animal dog = new Dog();
Animal cat = new Cat();
dog.MakeSound(); // 輸出 "The dog barks"
cat.MakeSound(); // 輸出 "The cat meows"
}
}
這兩種方法都可以實(shí)現(xiàn)多態(tài),但接口更適合用于定義行為契約,而繼承更適合用于表示類之間的關(guān)系。在實(shí)際開發(fā)中,你可以根據(jù)需要選擇合適的方法來實(shí)現(xiàn)多態(tài)。