C# 封装、继承、抽象、接口

news/2025/11/16 15:30:30/文章来源:https://www.cnblogs.com/njzBoy/p/19228267

在C#中,封装、继承、抽象、接口是面向对象编程(OOP)的四大核心特性,它们共同支撑了代码的复用性、扩展性和可维护性。下面分别详解:

一、封装(Encapsulation)

定义:将类的内部数据(字段)和操作数据的方法捆绑在一起,隐藏内部实现细节,只通过公开的接口(属性、方法)与外部交互。
核心目的:保护数据不被随意修改,确保数据的合法性;降低外部代码对类内部实现的依赖。

实现方式:通过访问修饰符控制成员的可见性:

  • private:仅类内部可访问(核心数据通常设为private);
  • public:外部可直接访问(公开的接口);
  • protected:类内部及派生类可访问;
  • internal:同一程序集内可访问。

示例
通过“私有字段+公开属性”实现封装,确保年龄(_age)只能被合法赋值(非负数):

public class Person
{// 私有字段:隐藏内部数据private int _age;// 公开属性:提供访问接口,附加验证逻辑public int Age{get { return _age; }  // 读取set { if (value >= 0)  // 验证:年龄不能为负数_age = value; else throw new ArgumentException("年龄不能为负数");}}// 公开方法:外部可调用的操作public void SayHello(){Console.WriteLine($"我今年{_age}岁");}
}// 使用
var person = new Person();
person.Age = 20;  // 合法赋值
person.SayHello();  // 输出:我今年20岁
// person.Age = -5;  // 抛出异常(被封装逻辑拦截)

二、继承(Inheritance)

定义:允许一个类(派生类/子类)继承另一个类(基类/父类)的成员(字段、方法等),并可扩展或重写基类功能。
核心目的:实现代码复用(避免重复编写相同逻辑);建立类的层次关系(如“动物→狗→金毛”)。

C#继承规则

  • 单继承:一个类只能直接继承一个基类(但可间接继承多层);
  • 基类成员访问:派生类可访问基类的public/protected成员,private成员不可访问;
  • 重写:基类用virtual声明可重写方法,派生类用override重写。

示例
基类Animal定义通用行为,派生类DogCat继承并扩展:

// 基类
public class Animal
{public string Name { get; set; }// 虚方法:允许派生类重写public virtual void MakeSound(){Console.WriteLine("动物发出声音");}
}// 派生类Dog(继承Animal)
public class Dog : Animal
{// 重写基类方法public override void MakeSound(){Console.WriteLine($"{Name}汪汪叫");}// 扩展基类:新增子类特有方法public void Fetch(){Console.WriteLine($"{Name}叼球");}
}// 派生类Cat
public class Cat : Animal
{public override void MakeSound(){Console.WriteLine($"{Name}喵喵叫");}
}// 使用
var dog = new Dog { Name = "旺财" };
dog.MakeSound();  // 输出:旺财汪汪叫(重写的方法)
dog.Fetch();      // 输出:旺财叼球(子类特有方法)var cat = new Cat { Name = "咪咪" };
cat.MakeSound();  // 输出:咪咪喵喵叫

三、抽象(Abstraction)

定义:通过抽象类(abstract class)提取多个类的共同特征,定义“必须实现的行为”,但不提供具体实现。
核心目的:强制派生类遵循统一的接口;隐藏复杂逻辑的细节,只暴露必要的骨架。

抽象类特点

  • 不能实例化(无法new),只能作为基类被继承;
  • 可包含抽象方法abstract修饰,无实现体,派生类必须用override实现);
  • 可包含具体方法(有实现体,派生类可直接使用或重写)。

示例
抽象类Shape定义“计算面积”的抽象行为,派生类CircleRectangle必须实现:

// 抽象类:定义共同接口
public abstract class Shape
{// 抽象方法:无实现,强制派生类实现public abstract double CalculateArea();// 具体方法:提供通用实现public void PrintArea(){Console.WriteLine($"面积:{CalculateArea()}");}
}// 派生类:必须实现抽象方法
public class Circle : Shape
{public double Radius { get; set; }public override double CalculateArea(){return Math.PI * Radius * Radius;  // 圆面积公式}
}public class Rectangle : Shape
{public double Width { get; set; }public double Height { get; set; }public override double CalculateArea(){return Width * Height;  // 矩形面积公式}
}// 使用
Shape circle = new Circle { Radius = 2 };
circle.PrintArea();  // 输出:面积:12.566...(调用具体方法,内部触发重写的抽象方法)Shape rectangle = new Rectangle { Width = 3, Height = 4 };
rectangle.PrintArea();  // 输出:面积:12

四、接口(Interface)

定义:一种完全抽象的“契约”,仅声明方法、属性、事件等的签名(无任何实现),实现接口的类必须严格遵守契约(实现所有成员)。
核心目的:定义“能力”或“行为”(如“可飞行”“可序列化”);突破C#单继承限制(一个类可实现多个接口)。

接口特点

  • 关键字interface声明,成员默认public(无需显式修饰);
  • 不能包含字段(只能有属性、方法等),且所有成员无实现;
  • 类通过:实现接口,必须实现接口的所有成员;
  • 支持多实现(一个类可实现多个接口,用,分隔)。

示例
接口IFly定义“飞行”能力,BirdPlane类实现该接口:

// 接口:定义“飞行”契约
public interface IFly
{void Fly();  // 仅声明,无实现int MaxHeight { get; }  // 属性签名
}// 鸟类实现“飞行”接口
public class Bird : IFly
{public void Fly(){Console.WriteLine("鸟扇动翅膀飞行");}public int MaxHeight => 1000;  // 实现属性
}// 飞机类实现“飞行”接口
public class Plane : IFly
{public void Fly(){Console.WriteLine("飞机靠引擎飞行");}public int MaxHeight => 10000;  // 实现属性
}// 使用
IFly bird = new Bird();
bird.Fly();  // 输出:鸟扇动翅膀飞行
Console.WriteLine($"鸟类最大飞行高度:{bird.MaxHeight}米");  // 1000米IFly plane = new Plane();
plane.Fly();  // 输出:飞机靠引擎飞行
Console.WriteLine($"飞机最大飞行高度:{plane.MaxHeight}米");  // 10000米

抽象类 vs 接口

区别 抽象类(abstract class) 接口(interface)
实现 可包含具体方法(有实现) 所有成员无实现(仅声明)
继承 单继承(一个类只能继承一个抽象类) 多实现(一个类可实现多个接口)
关系 表示“is-a”(是一种)关系(如“狗是动物”) 表示“has-a”(有某种能力)关系(如“鸟会飞”)
字段 可包含字段 不能包含字段(只能有属性签名)

总结

  • 封装:隐藏细节,保护数据(“怎么实现的不用管,用我的接口就行”);
  • 继承:复用代码,建立层次(“父类有的我都有,我还能扩展”);
  • 抽象:定义共性,强制实现(“你们都得按我规定的方法做事,但怎么做自己定”);
  • 接口:定义能力,支持多实现(“谁都可以具备这个能力,只要按规则实现”)。

这四大特性结合使用,可构建出灵活、易维护的面向对象程序。

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

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

相关文章

python类中的__setattr__

1. 基本用法 默认情况下,Python 自动处理属性赋值。但你可以重写 setattr 来拦截赋值。 class A:def __setattr__(self, name, value):super().__setattr__(name, value)2. 必须使用 super().setattr 才能真正赋值 错…

跨域问题解决方案的弃子——JSONP

今天一位学弟“哭着”来找我,说他面试美团(实习岗)的时候,被问到了跨域问题的解决方案,回答的并不好。我还正想着,这么常见的问题回答不出来,这不就是基础不过关。但谁知道,面试官让他封装 JSONP 来实现跨域!…

2025年11月智能床垫品牌TOP5推荐:服务器系统软件办公集成优化

一、2025年11月智能床垫品牌TOP5全景速览 1、澳洲施华白兰SWAN BEDDING 推荐指数:★★★★★ 口碑评分:9.9分 联系方式:4009936992 基础档案:源自1938年澳大利亚,全球护脊睡眠标杆品牌,依托百年工艺积淀与智能科…

CPU,GPU,DSP,FPGA,ASIC

💡 处理器类型概览名称 全称 核心特性 典型应用CPU 中央处理器 (Central Processing Unit) 通用串行计算,高灵活性,擅长复杂逻辑和控制流。 操作系统、日常软件、数据库。GPU 图形处理器 (Graphics Processing Uni…

智能床垫品牌全面选品指南:2025年11月最新TOP5榜单深度解析

** 一、2025年11月智能床垫品牌TOP5全景速览 1、澳洲施华白兰SWAN BEDDING 推荐指数:★★★★★ 口碑评分:9.9分 联系方式:4009936992 基础档案:源自1938年澳大利亚,作为全球护脊睡眠标杆品牌,拥有近百年工艺积淀…

DeepCFD+:一种工业级 CFD 代理模型训练框架【深度学习+流体力学】 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于Qt实现的窗口半透明流动背景

背景基于c++ & Qt实现的半透明渐变色窗口背景先看效果 (gif录制掉帧,请自行编译源码查看,效果比gif流畅)完整源码 GradientWidget.h #ifndef GRADIENTWIDGET_H #define GRADIENTWIDGET_H#include <QWidget&…

2025河南郑州锅炉设备/改造/安装/维修最新TOP5推荐:质造升级驱动产业新发展,河南中原地区优选

随着工业智能化转型加速,锅炉设备作为能源转化核心装备,其技术创新与安全效能成为企业选型的关键指标。本榜单基于资质认证、技术实力、服务体系三大维度,结合河南省特种设备检测研究院2024年度数据及行业用户调研反…

2025年11月冷媒剂厂家推荐榜:五家主流品牌综合对比与评价

进入2025年冬季,工业制冷、冷链物流、新能源电池热管理、数据中心温控等场景对冷媒剂的采购需求集中释放。用户普遍面临“低温不凝固、金属不腐蚀、能耗不飙升”的三重痛点,同时需要兼顾《危险化学品目录》最新调整、…

2025年11月防冻液厂家推荐榜:权威评测五强对比一览

进入供暖季前,工业循环冷却系统、空气能热泵、数据中心温控、冷链物流及新能源汽车热管理场景都会集中检查或更换防冻液。用户通常面临“冰点是否够低、金属缓蚀是否可靠、环保认证是否齐全、批量供货是否稳定”四大痛…

2025年11月防冻液厂家对比榜:五强性能数据与资质验证全记录

入冬在即,北方工业循环冷却系统、空气能热泵、数据中心温控管路陆续进入低温运行期,防冻液一旦选型失误,轻则机组停机,重则换热器冻裂、停产检修。过去两周,我接到最多的咨询是:“市面上防冻液厂家宣传相似,到底…

steam营销分析

观点来自:https://www.youtube.com/watch?v=uPOSZ_jhCaw&t=645s一.参加游戏节,需要订阅chirs的频道游戏节,新品节,会带来大量的流量由一些第三方公司举办,比如 方块游戏(皖新文化科技有限公司) 举办过,古…

2025年11月冷媒剂厂家评测榜:从资质到应用全场景解析

把冷媒剂选错一次,代价可能是整套制冷系统停机、货物变质、甚至安全事故。11月北方已进入供暖与冷链高负荷期,南方食品、医药、数据中心项目也在冲刺年底交付,用户此刻找厂家,最在意的是“现货快不快、资质全不全、…

心情助手3.07正式版,吃喝镇

心情助手3.07正式版,吃喝镇心情助手3.07正式版,吃喝镇下载地址: 心情助手3.07正式版.exe: https://url24.ctfile.com/f/17568224-971274511-54c9f2?p=8187 (访问密码: 8187)

在ec2上部署Qwen2.5omini和Qwen3omini模型

参考资料https://github.com/QwenLM/Qwen3-Omnihttps://qwen.ai/blog?id=65f766fc2dcba7905c1cb69cc4cab90e94126bf4&from=research.latest-advancements-list模型测评,https://www.bilibili.com/video/BV16SJyz…

分布式计算通信原语的抽象模型

学习深度神经网络并行策略时,常常混淆各种通信原语 Reduce/Scatter/Gather ... 本文尝试给出一种统一的抽象模型,将各类原语看作模型下一种个例。尝试简单调研并行计算理论,暂时没有找到完全一致对应的理论术语,故…

【shell】每日shell练习:安全日志入侵检测/专业的系统配置文件合规检查

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年第39周数字取证与事件响应技术动态

本周技术动态涵盖Salesloft-Drift入侵事件分析、SaaS供应链安全、恶意软件检测技术、数字取证新方法、威胁狩猎实践、漏洞利用分析等网络安全前沿技术内容,为安全专业人员提供全面技术参考。赞助内容 Salesloft-Drift…

第三次算法作业

动态规划法求解步骤​ (1)状态定义​:设 dp[i][j] 表示从第 i 行第 j 列元素出发,到达三角形底部的最大路径和。该定义精准捕捉了子问题的核心:每个位置的最优解仅依赖其下方的子问题结果。​ (2)递归方程式推导…

milvus: 搜索collection

一,代码:from flask import Blueprint,jsonify,render_template,requestfrom app import milvus_client from pymilvus import FieldSchema, DataType, CollectionSchema, Collection, connections from helpers.uti…