C# 的继承

举报
Rolle 发表于 2024/10/31 21:25:17 2024/10/31
【摘要】 继承是面向对象编程(OOP)的核心特性之一,它允许一个类(称为子类或派生类)继承另一个类(称为基类或父类)的属性和方法。在C#中,继承不仅提供了代码重用的功能,还支持多态和扩展现有功能。本文将深入探讨C#中的继承,包括它的基本概念、实现方式、以及如何在实际编程中有效使用继承。继承的基本概念1.1 什么是继承继承是一种机制,它允许创建基于现有类的新类,新类继承了现有类的属性和方法。这有助于减少...

继承是面向对象编程(OOP)的核心特性之一,它允许一个类(称为子类或派生类)继承另一个类(称为基类或父类)的属性和方法。在C#中,继承不仅提供了代码重用的功能,还支持多态和扩展现有功能。本文将深入探讨C#中的继承,包括它的基本概念、实现方式、以及如何在实际编程中有效使用继承。

  1. 继承的基本概念
    1.1 什么是继承
    继承是一种机制,它允许创建基于现有类的新类,新类继承了现有类的属性和方法。这有助于减少重复代码,并提供了一种组织代码的方式。

1.2 基类和派生类
基类:被继承的类,也称为父类。
派生类:继承基类的类,也称为子类。
1.3 继承的类型
单继承:一个类只继承一个基类。
多继承:一个类继承多个基类(在C#中不支持,但可以通过接口实现类似的功能)。
2. 实现继承
2.1 使用:关键字
在C#中,使用冒号(:)关键字来指定一个类继承另一个类。
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine(“Some sound”);
}
}

public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine(“Bark”);
}
}
2.2 访问基类成员
派生类可以访问其基类的公共和受保护的成员。
public class Animal
{
public string Name { get; set; }
}

public class Dog : Animal
{
public new string Name { get; set; }
}

var dog = new Dog();
dog.Name = “Rex”;
Console.WriteLine(dog.Name); // Outputs: Rex
2.3 构造函数
派生类需要调用基类的构造函数来初始化继承的成员。
public class Animal
{
public Animal(string name)
{
Name = name;
}

public string Name { get; set; }

}

public class Dog : Animal
{
public Dog(string name, string breed) : base(name)
{
Breed = breed;
}

public string Breed { get; set; }

}

var dog = new Dog(“Rex”, “German Shepherd”);
Console.WriteLine(dog.Name); // Outputs: Rex
3. 继承的高级特性
3.1 抽象类
抽象类是不能被实例化的类,它包含一个或多个抽象方法,这些方法必须在派生类中实现。
public abstract class Animal
{
public abstract void MakeSound();
}

public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine(“Bark”);
}
}
3.2 密封类和方法
密封类或方法防止被继承或重写。
public sealed class Dog : Animal
{
public override sealed void MakeSound()
{
Console.WriteLine(“Bark”);
}
}
3.3 虚拟方法和重写
虚拟方法允许在派生类中被重写。
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine(“Some sound”);
}
}

public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine(“Bark”);
}
}
3.4 新关键字
使用new关键字隐藏继承的成员。
public class Animal
{
public void Speak()
{
Console.WriteLine(“Some sound”);
}
}

public class Dog : Animal
{
public new void Speak()
{
Console.WriteLine(“Bark”);
}
}
3.5 基关键字
使用base关键字访问基类的成员。
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine(“Some sound”);
}
}

public class Dog : Animal
{
public override void MakeSound()
{
base.MakeSound();
Console.WriteLine(“Bark”);
}
}
4. 继承的最佳实践
4.1 优先使用组合而非继承
组合通常比继承更灵活,因为它不要求严格的类层次结构。

4.2 保持继承关系简单
避免创建复杂的继承层次结构,这会使代码难以理解和维护。

4.3 使用抽象类和接口
当需要强制实现特定方法时,使用抽象类;当需要实现多种行为时,使用接口。

4.4 避免过度使用密封
过度使用密封会限制代码的灵活性和扩展性。

4.5 考虑使用虚拟方法和重写
虚拟方法和重写是实现多态的强大工具,但应谨慎使用,以避免复杂的继承关系。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。