C# 面向对象特性

article/2025/6/9 1:02:20

        面向对象编程的三大基本特性是:封装继承多态。下面将详细介绍这三大特性在C#中的体现方式。

封装

定义:把对象的数据和操作代码组合在同一个结构中,这就是对象的封装性。

体现方式

  • 使用访问修饰符控制成员的可见性

  • 通过属性(Property)封装字段

  • 使用方法封装实现细节

访问修饰符

关键字

范围

描述

public

公共成员

无限制访问

protected

保护成员

当前类及其派生类

private

私有成员

当前类内部成员访问

internal

内部成员

仅在当前程序集访问

protected internal

保护内部成员

仅限于当前程序集或该类的派生类访问

属性

 //1.全写
private string name;
public string Name
{get { return name; }set { name = value; }
}//2.全简写
public int Age { get; set; }//3.半简写
private string address;
public string Address => address;  //等价于 public int Age { get { return age; } }//4.只读,不可写入
public float Money { get; }
public float PrivateMoney { get; private set; }//5.get set有代码的简写
//属性的用途之一:此处体现了属性的好处,用get给属性赋初值,set赋值可省去一个SetIntroduction()方法,使代码更简洁
private string introduction;
public string Introduction
{get => string.Format($"{introduction}My name is {name}, I am {Age} years old");set => introduction = string.Format($"Hello {value}, ");
}//等价于
//public string Introduction
//{
//    get
//    {
//        return string.Format($"{introduction}My name is {name}, I am {Age} years old");
//    }
//    set 
//    {
//        introduction = string.Format($"Hello {value}, ");
//    }//}

继承

体现方式

  • 使用 : 符号实现类继承,派生类继承基类的成员

  • 可以使用 sealed 关键字阻止进一步继承

  • 支持单继承(类只能继承一个基类),但能继承多个接口

继承基类

// 基类
public class Animal
{public string Name { get; set; }public virtual void MakeSound(){Console.WriteLine("Animal makes a sound");}
}// 派生类
public class Dog : Animal
{public override void MakeSound(){Console.WriteLine("Bark bark!");}public void Fetch(){Console.WriteLine("Fetching the ball");}
}// 使用
Animal myDog = new Dog();
myDog.MakeSound(); // 输出: Bark bark!

多态

体现方式

  • 方法重写(override)和虚方法(virtual)

  • 抽象类(abstract)和抽象方法

  • 接口(interface)实现

  • 方法重载(overload)

方法重载

定义:在同一个类中定义了相同名称的多个方法成员的能力。唯一的区别是它们具有不同的签名(即具有不同的参数类型或不同的参数个数)。

注意:

1、返回类型不是方法签名的一部分:当两个方法只有返回类型不同时,不能算作方法重载。

2、形参名称也不是方法签名的一部分:当两个方法只有形参名称不同时,不能算作方法重载。

方法重写

在派生类中通过重写虚方法实现抽象方法、实现接口成员来实现多态。

重写虚方法

 public class Animal{public virtual void Speak(){Console.WriteLine("Hello World!");}}public class Dog : Animal{public override void Speak(){Console.WriteLine("汪汪汪");}}

实现抽象方法

1、抽象方法必须声明抽象类中

2、抽象类的派生类必须重写基类抽象方法

3、抽象类中可以包含非抽象方法,但非抽象类不能包含抽象方法

4、抽象成员不能是私有的、抽象类不能实例

public abstract class Animal
{public abstract void Speak();}public class Dog : Animal
{public override void Speak(){Console.WriteLine("汪汪汪");}
}

实现接口成员

public interface Animal
{public void Speak();}public class Dog : Animal
{public void Speak(){Console.WriteLine("汪汪汪");}
}

总结

C#中面向对象的三大特性通过以下方式体现:

  1. 封装:通过访问修饰符、属性和方法实现数据隐藏和保护

  2. 继承:通过类继承机制实现代码复用和层次关系

  3. 多态:通过虚方法、抽象类、接口和方法重载实现同一操作作用于不同对象时产生不同行为

这三大特性共同构成了面向对象编程的基础,使代码更易于维护、扩展和重用。


http://www.hkcw.cn/article/mOcLaFHpIS.shtml

相关文章

[LitCTF 2024]浏览器也能套娃?

打开题目在线环境: 这里尝试填写一个网站回车之后是: 这里想到了ssrf漏洞:ssrf漏洞通常是由于应用程序在处理用户输入时缺乏严格的安全检查,错误地信任外部输入,或者使用的网络请求库配置不当等原因导致的。攻击者可…

明远智睿SSD2351开发板:视频监控领域的卓越之选

随着安全防范意识的提高,视频监控在各个领域得到了广泛应用。明远智睿SSD2351开发板凭借其出色的性能和特性,成为视频监控领域的卓越之选,为视频监控系统的升级和发展提供了有力支持。 SSD2351开发板的四核1.4GHz处理器在视频监控数据处理方面…

threejs加载外部三维模型(gltf)

1. 建模软件绘制3D场景(Blender) 这节课主要给大家科普一些三维模型创建、美术和程序员协作的相关问题。 三维建模软件作用 对于简单的立方体、球体等模型,你可以通过three.js的几何体相关API快速实现,不过复杂的模型,比如一辆轿车、一栋房…

【从零开始系列】Qwen2.5 Llama-Factory:开源语言大模型+训练平台——(超详细、最新版)一篇文章解决:环境搭建 => 微调训练 => 本地部署

目录 一、简介 1.Qwen2.5:开源模型 2. LLaMA-Factory:微调工具 二、环境搭建 1.Python和Pytorch版本 2.llamafactory项目克隆安装 3.其他重要库安装 三、模型微调 1.预训练模型下载 2.训练数据集 ①创建对话文本数据 ②配置dataset_info 3.配置文件与…

git 代码提交规范,feat,fix,chore都是什么意思?

写到前面 经常看到别人提交的代码记录里面包含一些feat、fix、chore等等,而我在提交时也不会区分什么,直接写下提交信息,今天就来看一下怎么个事,就拿 element-plus 举例来看一下 其实这么写是一种代码提交规范,当然…

Gemma 3模型:Google 开源新星,大语言模型未来探索

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、快速发展的AI世界:为何关注Gemma 3&#x…

2024.11最新Hexo+GitHub搭建个人博客

2024.11最新HexoGitHub搭建个人博客 一、Hexo介绍 Hexo 是一个快速、简洁且高效的博客框架,有丰富的主题和插件可供使用。 Hexo 使用 Markdown(或其他标记语言)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。这…

完美解决 git 报错 “fatal: unable to access ‘https://github.com/.../.git‘: Recv failure Connection was rese

文章目录 方法一:取消代理设置方法二:设置系统代理结语 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏&#xf…

git 拉取Github时报错【 Recv failure: Connection was reset】

问题 当我们电脑能够正常访问Github时,但是git拉取代码出现 : Recv failure: Connection was reset原因 这是因为使用了特殊上网方法,电脑能够正常访问,但是git通过底层访问需要配置代理才能正常访问 解决办法 配置方法如下&…

【PostgreSQL系列】PostgreSQL性能优化

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

如何使用 TortoiseGit 将本地代码回退到指定版本

如何使用 TortoiseGit 将本地代码回退到指定版本 在使用 Git 进行版本控制时,我们可能会遇到需要回退到某个旧版本的情况,比如发现最近的修改引入了问题,或者需要恢复到某个特定的稳定状态。TortoiseGit 是一款非常流行的 Git 图形化工具&am…

航空安全警钟须长鸣 充电宝冒烟再敲警钟

5月31日,CZ6850杭州飞往深圳的航班上,一名旅客携带的相机电池和充电宝突然冒烟。乘务组迅速采取措施,排除了安全风险。为确保安全,机组决定立即返航,航班在起飞15分钟后安全降落。这次事件虽然没有造成人员伤亡,但再次提醒人们航空安全的重要性。任何微小的安全隐患都可能…

玩客云 OEC/OECT 笔记

外观 内部 PCB正面 PCB背面 PCB背面 RK3566 1Gbps PHY 配置 OEC 和 OECT(OEC-turbo) 都是基于瑞芯微 RK3566/RK3568 的网络盒子, 没有HDMI输入输出. 硬件上 OEC 和 OECT 是一样的, 唯一的区别是内存, OEC 内存 2GB 而OECT 内存是 4GB. 产品OECOEC-turboCPURK3566…

InfluxDB 高级函数详解:DERIVATIVE、INTEGRAL、SPREAD、HISTOGRAM 与 DIFFERENCE

在时序数据分析中,除了基础的聚合函数(如 MEAN、SUM),InfluxDB 还提供了一系列专门针对时间序列特性的高级函数。这些函数能帮助我们挖掘数据的变化趋势、波动特征和分布规律。下面我们将逐一解析五个关键函数:DERIVAT…

华为OD机试真题—— 最少数量线段覆盖/多线段数据压缩(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《最少数量线段覆盖/多线段数…

古代小孩哥怎么过六一 绿意中撒欢踢毽子

今天是六一儿童节,让我们一起看看古代的孩子们在这一天会玩些什么。古代的童趣VCR展示了高能量小孩哥的日常。他们在绿意盎然的环境中尽情撒欢,青翠的柳荫、碧绿的草地,还有亲密的玩伴。孩子们选择组团踢毽子,只见小孩哥眼神专注,动作轻快,毽子跃起时衣角也随之飘动。旁边…

有捏捏玩具甲醛超标40多倍 安全问题引热议

近日,拥有百万粉丝的捏捏玩具博主“有只猫叫小朋友”在社交平台上发布癌症诊断书,并表示暂停更新。这一举动引发了关于捏捏玩具安全性的讨论。有网友留言称,自己和孩子玩过捏捏玩具后出现了头疼、嗓子疼的情况。捏捏玩具是一种流行的硅胶材质慢回弹类解压玩具,外形多为软萌…

宇树机器狗go2添加3d雷达(下)添加velodyne系列雷达

0.前言 上一篇文章教大家如何在宇树机器狗go2的仿真环境中添加3d雷达livox mid360(宇树机器狗go2 添加3d雷达(上)添加livox系列雷达),本期文章会教大家添加lvelodyne的系列雷达,是添加3d雷达的下期。宇树机…

美国终止艾滋病疫苗研发项目 转向现有方法消除艾滋病

特朗普政府终止了一项2.58亿美元的项目,对艾滋病疫苗研发工作造成了沉重打击。一位不愿透露姓名且未经授权发言的高级官员表示,美国国立卫生研究院计划将关注点转向利用现有方法消除艾滋病,并暂停了莫德纳公司研发的一项艾滋病疫苗临床试验。公共卫生专家指出,这些削减措施…

需求分析文档(PRD)编写指南——结构化定义与标准化写作方法

序言 在产品研发过程中,需求分析文档(PRD)是连接业务目标与技术实现的核心纽带。一份清晰的PRD能够: 统一团队认知:让产品、开发、测试等角色对需求的理解保持一致; 减少沟通成本:通过结构化描…