C#中的封装、继承和多态

news2024/11/24 15:55:47

1.引言

在面向对象的编程中,封装、继承和多态是三个重要的概念。它们是C#语言中的基本特性,用于设计和实现具有高内聚和低耦合的代码。本文将详细介绍C#中的封装、继承和多态的相关知识。


在这里插入图片描述


目录

    • 1.引言
    • 2. 封装
      • 2.1 类
      • 2.2 访问修饰符
    • 3. 继承
    • 4. 多态
      • 4.1 虚方法
      • 4.2 抽象类
      • 4.3 接口
    • 5. 总结


2. 封装

封装是一种将数据和方法组合到一个单元中的机制,以实现信息隐藏和访问控制的目的。在C#中,封装通过使用类和访问修饰符来实现。

2.1 类

类是C#中封装的基本单位。一个类是一个抽象的数据类型,它定义了一组属性和方法。属性表示类的状态,而方法表示类的行为。通过使用类,我们可以将相关的数据和方法组合起来,形成一个具有特定功能的实体。

下面是一个示例类的定义:

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; }
    }
}

在上面的例子中,Person类包含了两个私有字段name和age,以及对应的公有属性Name和Age。私有字段只能在类内部访问,而公有属性可以被其他类访问和修改。这样就实现了对数据的封装。

2.2 访问修饰符

在C#中,访问修饰符用于控制类成员的访问权限。常用的访问修饰符有public、private、protected和internal。

  • public:表示公有的,可以在任何地方访问。
  • private:表示私有的,只能在类内部访问。
  • protected:表示受保护的,可以在类内部和派生类中访问。
  • internal:表示只能在当前程序集内访问。

通过使用适当的访问修饰符,可以实现对类成员的合理封装,提高代码的安全性和可维护性。


3. 继承

继承是一种通过定义一个新的类来扩展已有类的机制。通过继承,一个类可以获得父类的属性和方法,并重新定义或扩展它们。在C#中,继承使用关键字classbase来实现。

下面是一个示例类的继承:

public class Student : Person
{
    private string school;

    public string School
    {
        get { return school; }
        set { school = value; }
    }

    public void Study()
    {
        Console.WriteLine("I am studying at " + school);
    }
}

在上面的例子中,Student类继承自Person类,并新增了一个学校属性和一个学习方法。通过继承,Student类可以使用Person类中的属性和方法,同时还可以扩展新的功能。


4. 多态

多态是一种允许同一个方法在不同对象上产生不同结果的特性。在C#中,多态通过虚方法、抽象类和接口来实现。
在这里插入图片描述

4.1 虚方法

在基类中声明为virtual的方法可以在派生类中被重写。当调用被重写的方法时,实际执行的是对应派生类的方法。

下面是一个示例:

public class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing a shape");
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a rectangle");
    }
}

在上面的例子中,Shape类中的Draw方法声明为virtual,而Circle类和Rectangle类分别重写了该方法。当调用Draw方法时,实际执行的是对应派生类的方法。

4.2 抽象类

抽象类是一种不能被实例化的类,只能被继承,并且可以包含抽象成员和具体成员。抽象成员必须在派生类中被实现。

下面是一个示例:

public abstract class Shape
{
    public abstract void Draw();
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a rectangle");
    }
}

在上面的例子中,Shape类是一个抽象类,其中的Draw方法是一个抽象成员。Circle类和Rectangle类必须实现Draw方法,否则编译将报错。

4.3 接口

接口是一种定义了一组成员的类型,不包含具体的实现。一个类可以实现多个接口,并提供对应成员的具体实现。

下面是一个示例:

public interface IDrawable
{
    void Draw();
}

public class Circle : IDrawable
{
    public void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

public class Rectangle : IDrawable
{
    public void Draw()
    {
        Console.WriteLine("Drawing a rectangle");
    }
}

在上面的例子中,IDrawable接口定义了Draw方法,而Circle类和Rectangle类实现了该接口,并提供了具体的实现。


5. 总结

封装通过类和访问修饰符实现数据和方法的封装;继承通过基类和派生类实现代码的扩展和重用;多态通过虚方法、抽象类和接口实现同一方法在不同对象上产生不同结果的特性。这些特性使得我们能够编写出更加灵活和可扩展的代码。希望本文对你理解C#中的封装、继承和多态有所帮助。

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

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

相关文章

36个校招网络原理面试题

1.如何理解 URI? URI, 全称为(Uniform Resource Identifier), 也就是统一资源标识符,它的作用很简单,就是区分互联网上不同的资源。但是,它并不是我们常说的网址, 网址指的是URL, 实际上URI包含了URN和URL两个部分,由…

如何从众多知识付费平台中正确选择属于自己的平台(明理信息科技知识付费平台)

在当今的知识付费市场中,用户面临的选择越来越多,如何从众多知识付费平台中正确选择属于自己的平台呢?下面,我们将为您介绍明理信息科技知识付费平台相比同行的优势,帮助您做出明智的选择。 一、创新的技术架构&#…

全套SpringBoot讲义01

hello,我是小索奇,全套SpringBoot教程~一起来学习叭 文章目录 SpringBoot文档更新日志前言课程内容说明课程前置知识说明 SpringBoot基础篇JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作(一)JC-1-2.SpringBoot入门程序制…

Qt之QNetworkAccessManager 从本地和内存中上传数据到Http服务器

简述 接连做了好几个服务器的项目,例如文件传输用的Ftp和对象存储服务器(Object Storage Service),简单的信息传输用的WebServer,之前也有用过HttpServer不过都和WebServer一样简单的调用接口提交数据并没有上传过文件,正好趁这次…

人工智能导论习题集(2)

第三章:确定性推理 题1题2题3题4题5题6题7 题1 题2 题3 题4 题5 题6 题7

设计模式之结构型设计模式(二):工厂模式 抽象工厂模式 建造者模式

工厂模式 Factory 1、什么是工厂模式 工厂模式旨在提供一种统一的接口来创建对象,而将具体的对象实例化的过程延迟到子类或者具体实现中。有助于降低客户端代码与被创建对象之间的耦合度,提高代码的灵活性和可维护性。 定义了一个创建对象的接口&…

spring 笔记九 Spring AOP

Spring 的 AOP 简介 什么是AOP AOP 为Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是OOP 的延续,是软件开发中的一个热点,也是Spring框架…

【Spark精讲】Spark存储原理

目录 类比HDFS的存储架构 Spark的存储架构 存储级别 RDD的持久化机制 RDD缓存的过程 Block淘汰和落盘 类比HDFS的存储架构 HDFS集群有两类节点以管理节点-工作节点模式运行,即一个NameNode(管理节点)和多个DataNode(工作节点)。 Namenode管理文件系统的命名空…

BKP 备份寄存器 RTC 实时时钟-stm32入门

这一章节我们要讲的主要内容是 RTC 实时时钟,对应手册,是第 16 章的位置。 实时时钟这个东西,本质上是一个定时器,但是这个定时器,是专门用来产生年月日时分秒,这种日期和时间信息的。所以学会了 STM32 的…

Java系列-ConcurrentHashMap-addCount

1.addCount public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>implements ConcurrentMap<K,V>, Serializable {private final void addCount(long x, int check) {CounterCell[] as; long b, s;//1.counterCells不为null//2.或者 x加到baseCou…

挑战52天学小猪佩奇笔记--day24

52天学完小猪佩奇--day24 ​【本文说明】 本文内容来源于对B站UP 脑洞部长 的系列视频 挑战52天背完小猪佩奇----day24 的视频内容总结&#xff0c;方便复习。强烈建议大家去关注一波UP&#xff0c;配合UP视频学习。 注&#xff1a;这集开始变成一段一段的猜台词&#xff0c;加…

网站提示“不安全”

当你在浏览网站时&#xff0c;有时可能会遇到浏览器提示网站不安全的情况。这通常是由于网站缺乏SSL证书所致。那么&#xff0c;从SSL证书的角度出发&#xff0c;我们应该如何解决这个问题呢&#xff1f; 首先&#xff0c;让我们简单了解一下SSL证书。SSL证书是一种用于保护网站…

pybind11:对比C++和Python解线性方程组的速度

前言 上篇博客介绍了如何在用pybind11实现ndarray和C数组的转换自由&#xff0c;pybind11&#xff1a;实现ndarray转C原生数组&#xff08;没看过的朋友可以去看一看&#xff09;下面我们以一个实际的算法例子演示一下如何使用这个技术&#xff0c;方便的实现 Python 调用 C 写…

Java架构师系统架构高可用维度分析

目录 1 导语2 可用性介绍3 本地高可用-集群、分布式4 本地高可用-数据逻辑保护5 异地容灾-双活、两地三中心6 异地容灾-DRP规划&BCP业务连续性7 多活和妥协方案8 高可用流程9 总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导语 Java架构师在进行系统架构设…

蓝桥杯专题-真题版含答案-【排序法 - 改良的选择排序】【插补搜寻法】【稀疏矩阵】【欧拉与鸡蛋】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

【golang/g3n】3D游戏引擎G3N的windows安装与测试

目录 说在前面安装测试 说在前面 操作系统&#xff1a;win 11go version&#xff1a;go1.21.5 windows/amd64g3n版本&#xff1a;github.com/g3n/engine v0.2.0其他&#xff1a;找了下golang 3d相关的库&#xff0c;目前好像就这个比较活跃 安装 按照官方教程所说&#xff0c;…

ES6 面试题 | 13.精选 ES6 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

IDEA中alt enter不显示创建实现类快捷键

alt enter不显示创建实现类快捷键是因为idea中的设置没打开&#xff0c;按照一下设置打开就可以了。 点击setting-->>editor-->>intentions-->>java下的declaration 如下图所示&#xff1a;

PXI/PCIe/VPX机箱 ARM|x86 + FPGA测试测量板卡解决方案

PXI便携式测控系统是一种基于PXI总线的便携式测试测控系统&#xff0c;它填补了现有台式及机架式仪器在外场测控和便携测控应用上的空白&#xff0c;在军工国防、航空航天、兵器电子、船舶舰载等各个领域的外场测控场合和科学试验研究场合都有广泛的应用。由于PXI便携式测控系统…

HiveSql语法优化一 :分组聚合优化

Hive中未经优化的分组聚合&#xff0c;是通过一个MapReduce Job实现的。Map端负责读取数据&#xff0c;并按照分组字段分区&#xff0c;通过Shuffle&#xff0c;将数据发往Reduce端&#xff0c;各组数据在Reduce端完成最终的聚合运算。 Hive对分组聚合的优化主要围绕着减少Shuf…