TypechoJoeTheme

至尊技术网

登录
用户名
密码
搜索到 24 篇与 的结果
2025-11-16

.NET中接口(Interface)和抽象类(AbstractClass)的区别

.NET中接口(Interface)和抽象类(AbstractClass)的区别
在.NET开发实践中,接口(Interface)与抽象类(Abstract Class)是实现多态性和代码复用的重要工具。尽管它们都能定义方法契约并被子类实现或继承,但二者在设计理念、语法限制和应用场景上存在本质差异。理解这些差异,是写出高内聚、低耦合代码的关键。首先从语法层面来看,接口是一种纯粹的契约声明。在C#中,接口使用interface关键字定义,其中的方法默认为公共且无实现(C# 8.0后支持默认实现,但仍有限制),不能包含字段(除非是常量),也不能有构造函数。它只规定“能做什么”,而不关心“怎么做”。例如:csharp public interface ILogger { void Log(string message); void Error(string error); }而抽象类使用abstract class定义,它可以包含抽象方法(无实现)、具体方法(有实现)、字段、属性、事件甚至构造函数。抽象类更像一个“不完整的类”,允许部分实现,留给子类去完成剩余逻辑。例如:csharp public abstract class Animal { ...
2025年11月16日
56 阅读
0 评论
2025-11-14

C设计模式之简单工厂和工厂方法

C设计模式之简单工厂和工厂方法
在C#开发中,设计模式是提升代码质量、增强系统可维护性的关键手段。其中,工厂模式作为创建型设计模式的重要代表,广泛应用于对象创建的场景中。它通过将对象的实例化过程封装起来,降低客户端与具体类之间的耦合度。本文将重点探讨两种常见的工厂模式:简单工厂和工厂方法,并结合C#语言特性进行实现与对比。先来看简单工厂模式。它并不是GoF(Gang of Four)23种设计模式之一,但由于其结构简单、易于理解,在中小型项目中应用广泛。简单工厂的核心思想是定义一个专门负责创建其他类实例的类,这个类通常是一个静态类或包含静态方法的类。假设我们正在开发一个图形绘制系统,需要支持绘制圆形、矩形等图形。如果在客户端直接使用new Circle()或new Rectangle(),那么一旦新增图形类型,就需要修改多处代码,违反了“开闭原则”。此时,我们可以引入一个ShapeFactory类:csharp public abstract class Shape { public abstract void Draw(); }public class Circle : Shape { pub...
2025年11月14日
57 阅读
0 评论
2025-09-03

C属性(Property)与字段(Field)的本质区别:从语法到设计哲学的深度解析

C属性(Property)与字段(Field)的本质区别:从语法到设计哲学的深度解析
在C#面向对象编程中,属性和字段是最基础却又最容易被混淆的两个概念。许多初学者认为它们只是语法形式的不同,实则背后隐藏着完全不同的设计哲学和应用场景。理解它们的本质区别,是写出高质量C#代码的关键一步。一、语法层面的直观差异字段(Field)是类中最基础的数据容器,其声明简单直接: csharp private string _name; // 字段声明属性(Property)则通过get/set访问器构建了更复杂的结构: csharp public string Name // 属性声明 { get { return _name; } set { _name = value; } }这种语法差异只是个开始。当我们将代码编译为IL中间语言时,属性会被编译成名为get_Name和set_Name的独立方法,而字段则直接对应内存中的数据存储位置。这种底层实现的差异,直接决定了它们在运行时的不同行为特征。二、设计哲学的本质区别字段的本质是数据存储,它解决的是"数据存在哪里"的问题。当我们需要一个简单的数据容器,且不需要额外逻辑时,字段是最直接的选择。例如游戏角...
2025年09月03日
95 阅读
0 评论
2025-07-16

深入理解C抽象类:从概念到实战应用

深入理解C抽象类:从概念到实战应用
一、抽象类的本质特征抽象类(Abstract Class)是C#面向对象编程中承上启下的关键设计元素。与普通类最显著的区别在于,抽象类就像建筑行业的"施工蓝图"——它定义了结构框架,但需要具体施工队(派生类)来实现细节。我在实际开发中曾遇到这样一个场景:某电商系统需要支持多种支付方式(支付宝、微信、银联)。当发现每个支付类都有相同的验证逻辑和不同的执行流程时,抽象类就成了天然的解决方案。csharp public abstract class PaymentBase { // 抽象方法:只有声明没有实现 public abstract void ProcessPayment(decimal amount);// 普通方法:可直接继承 public bool ValidatePayment(decimal amount) { return amount > 0 && amount <= 100000; } }二、抽象类的六大实战要点 骨架与血肉分离原则 抽象类应当包含: 所有子类共有的字段/属性 基础方法实现 必须由子类实现...
2025年07月16日
122 阅读
0 评论
2022-07-21

PHP面向对象的链式调用方式

PHP面向对象的链式调用方式
实现起来也还蛮简单的,只需要在每个方法最后返回$this就可以了<?php class wc { public function __construct($who) { echo "{$who}准备去上厕所了"; } public function go() { echo "1.跑出了教室"; return $this; } public function action($ss) { echo $ss . "2.到了厕所,开始尿尿"; return $this; } public function back() { echo "3.尿尿结束,回到教室"; return $this; } } $xm = new wc("小明"); $xm->go()->...
2022年07月21日
863 阅读
0 评论
2022-06-10

PHP面向对象封装MySQL PDO(已使用预处理)

PHP面向对象封装MySQL PDO(已使用预处理)
Mysql.class.php<?php class Mysql { public $link; public function __construct() { $this->conn(); } /** * 连接数据库,从配置文件读取配置信息 */ public function conn() { $cfg = require 'config.php'; try { $this->link = new PDO("mysql:dbname={$cfg['databaseName']};host={$cfg['host']};charset={$cfg['charset']};port={$cfg['port']}", $cfg['name'], $cfg['passw...
2022年06月10日
955 阅读
0 评论
2021-01-12

PHP面向对象封装Redis、Memcached、Memcache实例

PHP面向对象封装Redis、Memcached、Memcache实例
Cache.class.php<?php class Mysql { public $link; public function __construct() { $this->conn(); } /** * 连接数据库,从配置文件读取配置信息 */ public function conn() { $cfg = require 'config.php'; $this->link = new mysqli($cfg['host'], $cfg['name'], $cfg['password'], $cfg['databaseName'], $cfg['port']); $this->query('set names ' . $cfg['charset']); ...
2021年01月12日
1,545 阅读
0 评论
2021-01-04

PHP面向对象封装MySQL操作函数、文件上传

PHP面向对象封装MySQL操作函数、文件上传
Mysql.class.php<?php class Mysql { public $link; public function __construct() { $this->conn(); } /** * 连接数据库,从配置文件读取配置信息 */ public function conn() { $cfg = require 'config.php'; $this->link = new mysqli($cfg['host'], $cfg['name'], $cfg['password'], $cfg['databaseName'], $cfg['port']); $this->query('set names ' . $cfg['charset']); ...
2021年01月04日
1,286 阅读
0 评论
2020-12-30

PHP面向对象的自动加载

PHP面向对象的自动加载
实例化某个类时,如MySQL类,需要先require('mysql.php' );如果类比较多,目录也比较多,require文件时,将会变得麻烦我们需要一个自动化的解决方法--自动加载用法:声明一个函数,并注册为"自动加载函数"当系统发现某个类不存在时,会调用此函数,我们可以在函数中加载需要的类文件<?php function myLoad($class){ require $class . '.php'; } //把myLoad注册成自动加载函数 spl_autoload_register('myLoad'); new mysql();//查看效果
2020年12月30日
1,236 阅读
0 评论

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 强强强
    2025-04-07
  2. jesse
    2025-01-16
  3. sowxkkxwwk
    2024-11-20
  4. zpzscldkea
    2024-11-20
  5. bruvoaaiju
    2024-11-14

标签云