C# 继承的详细介绍和使用

文章目录

  • 前言
  • 一、C# 继承的概念:
  • 二、继承的基本使用方法
  • 三、继承在项目中的具体应用示例
  • 四、继承的类型
    • 1.公有继承(Public Inheritance):
    • 2.保护继承(Protected Inheritance):
    • 3.私有继承(Private Inheritance):
    • 4.受保护的内部继承(Protected Internal Inheritance):
    • 5.接口继承(Interface Inheritance):
    • 6.多态继承(Polymorphic Inheritance):
    • 7.抽象类继承(Abstract Class Inheritance):
  • 五、多态和继承:
  • 六、继承和泛型的结合
  • 七、继承和LINQ
  • 总结


前言

C# 是一种强大的面向对象的编程语言,它支持许多面向对象编程的概念,其中之一就是继承。继承是面向对象编程的核心特性之一,它允许我们创建一个类(称为子类)来继承另一个类(称为基类)的属性和方法。这样,我们可以重用代码,减少重复,并使我们的代码更加模块化和可维护。在 C# 中,继承是通过使用 “:” 符号来实现的。子类继承了基类的属性和方法,同时还可以添加新的属性和方法,或者覆盖基类的方法。


一、C# 继承的概念:

继承是面向对象编程中的一个基本概念,它允许一个类继承另一个类的属性和方法。在 C# 中,继承是通过使用 “:” 符号来实现的。子类继承了基类的属性和方法,同时还可以添加新的属性和方法,或者覆盖基类的方法。继承的目的是为了实现代码的重用和扩展性。

二、继承的基本使用方法

在 C# 中,要使用继承,首先需要定义一个基类,然后创建一个子类来继承这个基类。下面是一个简单的例子:

// 基类
class Animal
{public string Name { get; set; }public void MakeSound(){Console.WriteLine("The animal makes a sound");}
}// 子类
class Dog : Animal
{public new void MakeSound(){Console.WriteLine("The dog barks");}
}

在这个例子中,我们定义了一个名为 “Animal” 的基类,它有一个名为 “Name” 的属性和一个名为 “MakeSound” 的方法。然后,我们创建了一个名为 “Dog” 的子类,它继承了 “Animal” 类。在 “Dog” 类中,我们通过使用 “new” 关键字覆盖了 “MakeSound” 方法。

三、继承在项目中的具体应用示例

继承在项目中有很多实际应用,以下是一个常见的例子:

// 基类
class Vehicle
{public string Brand { get; set; }public string Model { get; set; }public void Start(){Console.WriteLine("The vehicle starts");}
}// 子类
class Car : Vehicle
{public string Color { get; set; }public override void Start(){Console.WriteLine("The car starts");}
}// 使用继承
Vehicle myVehicle = new Car { Brand = "Toyota", Model = "Corolla", Color = "Red" };
myVehicle.Start(); // 输出:"The car starts"

四、继承的类型

C# 支持两种类型的继承:

1.公有继承(Public Inheritance):

公有继承是最常用的继承类型,子类继承了基类的公有成员和受保护的成员。

public class Animal
{public string Name { get; set; }public void MakeSound(){Console.WriteLine("The animal makes a sound");}
}public class Dog : Animal
{public override void MakeSound(){Console.WriteLine("The dog barks");}
}

2.保护继承(Protected Inheritance):

保护继承使得基类的成员在子类中表现为受保护的,这意味着它们只能在子类内部和基类内部访问。

public class Animal
{protected string Name { get; set; }protected void MakeSound(){Console.WriteLine("The animal makes a sound");}
}public class Dog : Animal
{public override void MakeSound(){Console.WriteLine("The dog barks");}
}

3.私有继承(Private Inheritance):

私有继承是最严格的继承类型,基类的成员在子类中完全不可见,只能在基类内部访问。

public class Animal
{public string Name { get; set; }public void MakeSound(){Console.WriteLine("The animal makes a sound");}
}public class Dog : Animal
{
}

4.受保护的内部继承(Protected Internal Inheritance):

这是C#中的一个特殊继承类型,允许子类继承父类的受保护成员,以及父类内部的公有成员。这种继承类型在同一程序集中的不同类之间非常有用。

public class Animal
{protected internal string Name { get; set; }protected internal void MakeSound(){Console.WriteLine("The animal makes a sound");}
}public class Dog : Animal
{
}

5.接口继承(Interface Inheritance):

在C#中,类可以通过实现接口来继承接口的成员(方法和属性)。这与类之间的继承不同,因为接口只定义了方法签名,而不提供实现。

public interface IAnimal
{void MakeSound();
}public class Dog : IAnimal
{public void MakeSound(){Console.WriteLine("The dog barks");}
}

6.多态继承(Polymorphic Inheritance):

这是继承的一个高级概念,它允许使用基类的引用或指针来调用子类的方法。这是通过方法重写(Overriding)实现的,在子类中提供与基类方法相同的方法签名和返回类型。

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");}
}Animal myAnimal = new Dog();
myAnimal.MakeSound(); // 输出 "The dog barks"

7.抽象类继承(Abstract Class Inheritance):

在C#中,可以将基类标记为抽象类(使用abstract关键字),这样子类必须实现基类中所有的抽象方法。

public abstract class Animal
{public abstract void MakeSound();
}public class Dog : Animal
{public override void MakeSound(){Console.WriteLine("The dog barks");}
}

五、多态和继承:

多态是面向对象编程的另一个核心概念,它允许我们使用一个基类引用指向不同的子类对象。通过多态,我们可以实现接口和继承的方法重写,从而实现不同的行为。

class Animal
{public virtual void MakeSound(){Console.WriteLine("The animal makes a sound");}
}class Dog : Animal
{public override void MakeSound(){Console.WriteLine("The dog barks");}
}class Cat : Animal
{public override void MakeSound(){Console.WriteLine("The cat meows");}
}Animal myAnimal = new Dog();
myAnimal.MakeSound(); // 输出:"The dog barks"

在这个例子中,我们定义了一个名为 “Animal” 的基类,它有一个名为 “MakeSound” 的虚方法(virtual method),这意味着它可以被继承并重写。然后,我们创建了两个子类 “Dog” 和 “Cat”,它们各自重写了 “MakeSound” 方法。通过使用多态,我们创建了一个 “Animal” 类型的引用 “myAnimal”,并将其指向一个 “Dog” 类型的对象。当我们调用 “myAnimal.MakeSound()” 时,输出是 “The dog barks”,这是因为 “Dog” 类重写了 “MakeSound” 方法。

六、继承和泛型的结合

C# 允许在使用泛型类时结合继承。这可以在设计需要类型安全性的泛型类时非常有用。

class GenericBase<T>
{protected T Data { get; set; }public GenericBase(T data){Data = data;}
}class DerivedGeneric<T> : GenericBase<T>
{public DerivedGeneric(T data) : base(data){}public void ShowData(){Console.WriteLine(Data);}
}GenericBase<int> myBase = new DerivedGeneric<int>(42);
myBase.ShowData(); // 输出:42

在这个例子中,我们定义了一个泛型类 “GenericBase”,然后创建了一个泛型子类 “DerivedGeneric”,它继承了 “GenericBase”。我们可以为 “DerivedGeneric” 创建一个实例,并传递任何类型到泛型参数 “T”。

七、继承和LINQ

LINQ(Language Integrated Query)是C#中用于查询和操作数据的一种强大工具。继承在LINQ中用于定义数据源的层次结构,以便进行更复杂的查询。

class Animal
{public int Id { get; set; }public string Name { get; set; }
}class Dog : Animal
{public string Breed { get; set; }
}List<Animal> animals = new List<Animal>
{new Dog { Id = 1, Name = "Buddy", Breed = "Golden Retriever" },new Dog { Id = 2, Name = "Max", Breed = "Chihuahua" },new Animal { Id = 3, Name = "Whiskers" }
};var query = animals.OfType<Dog>().Where(d => d.Breed == "Golden Retriever").Select(d => d.Name);
foreach (var name in query)
{Console.WriteLine(name);
}

总结

C# 继承是面向对象编程的一个强大特性,它允许我们创建一个基类,然后创建子类来继承基类的属性和方法。通过使用继承,我们可以实现代码的重用和扩展性。然而,我们需要谨慎使用继承,以避免增加代码的复杂性和降低灵活性。随着C#语言的发展,我们可以期待更多的特性来帮助我们更好地使用继承和其他面向对象的概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java实现康复中心管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

Intellij IDEA各种调试+开发中常见bug

Intellij IDEA中使用好Debug&#xff0c;主要包括如下内容&#xff1a; 一、Debug开篇 ①、以Debug模式启动服务&#xff0c;左边的一个按钮则是以Run模式启动。在开发中&#xff0c;我一般会直接启动Debug模式&#xff0c;方便随时调试代码。 ②、断点&#xff1a;在左边行…

如何在 Microsoft Azure 上部署和管理 Elastic Stack

作者&#xff1a;来自 Elastic Osman Ishaq Elastic 用户可以从 Azure 门户中查找、部署和管理 Elasticsearch。 此集成提供了简化的入门体验&#xff0c;所有这些都使用你已知的 Azure 门户和工具&#xff0c;因此你可以轻松部署 Elastic&#xff0c;而无需注册外部服务或配置…

C语言基础(五)——联合

联合 引言联合的声明联合的声明typedef命名联合 设置联合的值C89&#xff08;标准&#xff09;方式使用.操作符进行指定初始化 联合的内存布局联合的使用场景节省内存资源实际应用案例分析 总结 引言 在学习C语言基础时&#xff0c;联合和结构体是两个经常被拿来比较的概念。虽…

NuxtJs安装Sass后出现ERROR:Cannot find module ‘webpack/lib/RuleSet‘

最近了解NuxtJs时&#xff0c;发现问题比较多&#xff0c;对于初学者来说是件比较头痛的事。这次是安装sass预处理器&#xff0c;通过命令安装后&#xff0c;出现了ERROR&#xff1a;Cannot find module webpack/lib/RuleSet 错误&#xff0c;于是根据之前经验&#xff0c;对版…

Python统计分析——参数估计

参考资料&#xff1a;用python动手学统计学 所谓参数就是总体分布的参数。 1、导入库 # 导入用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 导入用于绘图的库 from matplotlib import pyplot as plt import seabor…

vue前端+nodejs后端通信-简单demo

本文记录vue前端nodejs后端通讯最简单的方法&#xff0c;供广大网友最快速进入全栈开发。 技术架构 前端 vue axios 后端 nodejs express 一、前端部分-搭建VUE 项目 vue create Vnodenpm run serve 启动&#xff1b; 具体操作步骤&#xff0c;请自行百度&#xff0c;这里没…

minitouch王者荣耀按键百分比

minitouch王者荣耀按键百分比 3 技能英雄 原图 2376 x 1104 xy说明x百分比y百分比23761104总分辨率160444金币0.0673400673400670.402173913043478296440物品10.1245791245791250.398550724637681296566物品20.1245791245791250.51268115942029470864摇杆0.1978114478114480…

51单片机之LED灯模块篇

御风以翔 破浪以飏 &#x1f3a5;个人主页 &#x1f525;个人专栏 目录 点亮一盏LED灯 LED的组成原理 LED的硬件模型 点亮一盏LED灯的程序设计 LED灯闪烁 LED流水灯 独立按键控制LED灯亮灭 独立按键的组成原理 独立按键的硬件模型 独立按键控制LED灯状态 按键的抖动 独立按键…

当服务器发布代码与本地代码不一致无法发布时(java)

现象&#xff1a;服务器代码与本地代码不一致&#xff0c;本地代码发布上去有错误&#xff0c;替换配置文件&#xff0c;替换修改的文件也无效&#xff0c;原使用者已离职 我的思路&#xff1a; 1.下载服务器上发布包 2.反编译服务器上代码和本地代码&#xff0c;反编译工具…

机器学习本科课程 实验3 决策树处理分类任务

实验3.1 决策树处理分类任务 使用sklearn.tree.DecisionTreeClassifier完成肿瘤分类&#xff08;breast-cancer&#xff09;计算最大深度为10时&#xff0c;十折交叉验证的精度(accuracy)&#xff0c;查准率(precision)&#xff0c;查全率(recall)&#xff0c;F1值绘制最大深度…

Haas 开发板连接阿里云上传温湿度和电池电压

目录 一、在阿里云上创建一个产品 二、开发环境的介绍 三、创建wifi示例 四、编写SI7006和ADC驱动 五、wifi配网 六、主要源码 七、查看实现结果 一、在阿里云上创建一个产品 登录自己的阿里云账号&#xff0c; 应该支付宝&#xff0c;淘宝账号都是可以的。 接着根据需求…

【Redis】理论基础 - 分区策略

[toc]、 在 Redis 的学习中&#xff0c;我们将重点介绍分区策略&#xff0c;这是一种通过水平扩展来提高 Redis 性能和处理大量数据的方法。通过分区&#xff0c;我们可以将数据分散存储在多个 Redis 实例中&#xff0c;充分利用集群的计算和存储资源。本篇博客将介绍 Redis 的…

设置 相关

记录使用过程中做的设置相关事宜。方便后续查询 vscode如何自动生成html格式&#xff1a; vscode快速生成html模板 --两种方法&#xff0c;亲测有用_vscode自动生成html模板-CSDN博客 使用第二个方式。存储html格式后缀。输入&#xff01;&#xff0c;vscode自动补全。 安装…

ywtool login guard命令

一.登录防护功能介绍 登录防护功能主要检查系统日志/var/log/secure&#xff0c;查看系统有没有被暴力登录。登录防护默认是检测3分钟内登录系统失败15次(次数可修改)后,视其为有攻击性,拉黑此IP(centos7通过系统文件阻止IP,centos8/9通过防火墙阻止IP)。此脚本只针对SSH访问,…

platform tree架构下i2c应用实例(HS3003)

目录 概述 1 探究platform tree下的i2c 1.1 platform tree下的i2c驱动 1.2 查看i2c总线下的设备 1.3 使用命令读写设备寄存器 2 认识HS3003 2.1 HS3003特性 2.2 HS3003寄存器 2.2.1 温湿度数据寄存器 2.2.2 参数寄存器 2.2.3 一个参数配置Demo 2.3 温湿度值转换 2.…

在工业制造方面,如何更好地实现数字化转型?

实现工业制造的数字化转型涉及利用数字技术来增强流程、提高效率并推动创新。以下是工业制造领域更好实现数字化转型的几个关键步骤&#xff1a; 1.定义明确的目标&#xff1a; 清楚地概述您的数字化转型目标。确定需要改进的领域&#xff0c;例如运营效率、产品质量或供应链…

Camunda流程引擎数据库架构

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;数据库架构…

编程笔记 html5cssjs 081 JavaScript 异常处理语句

编程笔记 html5&css&js 081 JavaScript 异常处理语句 一、结构和语法&#xff1a;二、示例&#xff1a;总结 在JavaScript中&#xff0c;异常处理主要通过 try...catch...finally 语句实现。这个结构允许你捕获并处理程序运行时可能出现的错误&#xff08;即异常&…

回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)

回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&…