C#设计模式--原型模式(Prototype Pattern)
原型模式是一种创建型设计模式
,它允许通过复制现有对象来创建新对象,而无需通过构造函数。这种方式可以提高性能,特别是在创建复杂对象时。C# 中可以通过实现 ICloneable 接口或自定义克隆方法来实现原型模式。
案例 1:文档编辑器中的克隆功能
场景描述
在一个文档编辑器中,用户可以创建复杂的文档对象,包括文本、图片、表格等。为了提供“撤销”功能,我们需要保存文档的多个状态。使用原型模式可以高效地克隆文档对象,避免重复创建复杂的对象。
代码实现
using System;
using System.Collections.Generic;// 文档类,实现 ICloneable 接口
public class Document : ICloneable
{public string Text { get; set; }public List<string> Images { get; set; }public List<string> Tables { get; set; }public Document(){Images = new List<string>();Tables = new List<string>();}// 克隆方法public object Clone(){Document clonedDocument = new Document{Text = this.Text,Images = new List<string>(this.Images),Tables = new List<string>(this.Tables)};return clonedDocument;}public override string ToString(){return $"Text: {Text}, Images: {string.Join(", ", Images)}, Tables: {string.Join(", ", Tables)}";}
}// 客户端代码
public class DocumentEditor
{private Stack<Document> _history = new Stack<Document>();public void CreateDocument(string text, List<string> images, List<string> tables){Document document = new Document{Text = text,Images = images,Tables = tables};_history.Push(document);}public void Undo(){if (_history.Count > 1){_history.Pop();Document currentDocument = _history.Peek();Console.WriteLine("Undo: " + currentDocument);}else{Console.WriteLine("No more actions to undo.");}}
}// 使用示例
public class Program
{public static void Main(){DocumentEditor editor = new DocumentEditor();editor.CreateDocument("Hello, World!", new List<string> { "image1.jpg" }, new List<string> { "table1" });editor.CreateDocument("Hello, C#!", new List<string> { "image2.jpg" }, new List<string> { "table2" });editor.Undo(); // 输出: Undo: Text: Hello, World!, Images: image1.jpg, Tables: table1editor.Undo(); // 输出: No more actions to undo.}
}
代码解析
- Document 类:实现了 ICloneable 接口,并提供了 Clone 方法来深拷贝对象。
- DocumentEditor 类:维护了一个文档历史栈,每次创建文档时将其压入栈中。Undo 方法通过弹出栈顶元素来实现撤销功能。
- 客户端代码:创建文档并进行撤销操作,验证原型模式的效果。
案例 2:游戏中的角色克隆
场景描述
在一款游戏中,玩家可以选择不同的角色,并且可以快速切换角色。为了提高性能,可以使用原型模式来克隆角色对象,而不是每次都重新创建。
代码实现
using System;// 角色类,实现 ICloneable 接口
public class Character : ICloneable
{public string Name { get; set; }public int Level { get; set; }public string Weapon { get; set; }// 克隆方法public object Clone(){return new Character{Name = this.Name,Level = this.Level,Weapon = this.Weapon};}public override string ToString(){return $"Name: {Name}, Level: {Level}, Weapon: {Weapon}";}
}// 游戏管理器类
public class Game
{private Dictionary<string, Character> _characters = new Dictionary<string, Character>();public void AddCharacter(string name, Character character){_characters[name] = character;}public Character GetCharacter(string name){if (_characters.ContainsKey(name)){return (Character)_characters[name].Clone();}return null;}
}// 使用示例
public class Program
{public static void Main(){Game game = new Game();Character warrior = new Character{Name = "Warrior",Level = 10,Weapon = "Sword"};game.AddCharacter("Warrior", warrior);Character clonedWarrior = game.GetCharacter("Warrior");Console.WriteLine(clonedWarrior); // 输出: Name: Warrior, Level: 10, Weapon: Sword// 修改克隆的角色clonedWarrior.Level = 20;Console.WriteLine(clonedWarrior); // 输出: Name: Warrior, Level: 20, Weapon: Sword// 原始角色不受影响Console.WriteLine(game.GetCharacter("Warrior")); // 输出: Name: Warrior, Level: 10, Weapon: Sword}
}
代码解析
Character
类:实现了ICloneable
接口,并提供了 Clone 方法来深拷贝对象。Game
类:维护了一个角色字典,提供添加角色和获取角色的方法。获取角色时返回的是克隆的对象。- 客户端代码:创建角色并获取克隆的角色,验证原型模式的效果。
案例 3:图形编辑器中的图形克隆
场景描述
在一个图形编辑器中,用户可以创建各种图形(如圆形、矩形等),并可以复制图形。使用原型模式可以高效地克隆图形对象,避免重复创建复杂的图形对象。
代码实现
using System;
using System.Drawing;// 图形基类,实现 ICloneable 接口
public abstract class Shape : ICloneable
{public Point Position { get; set; }public Color Color { get; set; }public abstract object Clone();
}// 圆形类
public class Circle : Shape
{public int Radius { get; set; }public override object Clone(){Circle clonedCircle = new Circle{Position = this.Position,Color = this.Color,Radius = this.Radius};return clonedCircle;}public override string ToString(){return $"Circle at {Position} with radius {Radius} and color {Color}";}
}// 矩形类
public class Rectangle : Shape
{public int Width { get; set; }public int Height { get; set; }public override object Clone(){Rectangle clonedRectangle = new Rectangle{Position = this.Position,Color = this.Color,Width = this.Width,Height = this.Height};return clonedRectangle;}public override string ToString(){return $"Rectangle at {Position} with width {Width} and height {Height} and color {Color}";}
}// 图形编辑器类
public class GraphicsEditor
{private List<Shape> _shapes = new List<Shape>();public void AddShape(Shape shape){_shapes.Add(shape);}public Shape CloneShape(Shape shape){return (Shape)shape.Clone();}public void DisplayShapes(){foreach (var shape in _shapes){Console.WriteLine(shape);}}
}// 使用示例
public class Program
{public static void Main(){GraphicsEditor editor = new GraphicsEditor();Circle circle = new Circle{Position = new Point(50, 50),Color = Color.Red,Radius = 20};Rectangle rectangle = new Rectangle{Position = new Point(100, 100),Color = Color.Blue,Width = 50,Height = 30};editor.AddShape(circle);editor.AddShape(rectangle);Shape clonedCircle = editor.CloneShape(circle);clonedCircle.Position = new Point(70, 70);editor.AddShape(clonedCircle);editor.DisplayShapes();// 输出:// Circle at {X=50,Y=50} with radius 20 and color Color [Red]// Rectangle at {X=100,Y=100} with width 50 and height 30 and color Color [Blue]// Circle at {X=70,Y=70} with radius 20 and color Color [Red]}
}
代码解析
- Shape 类:抽象基类,实现了 ICloneable 接口,并提供了抽象的 Clone 方法。
- Circle 类 和 Rectangle 类:具体图形类,实现了 Clone 方法来深拷贝对象。
- GraphicsEditor 类:维护了一个图形列表,提供添加图形和克隆图形的方法。
- 客户端代码:创建图形并克隆图形,验证原型模式的效果。
优点
- 性能提升:通过克隆现有对象,避免了复杂的初始化过程,提高了性能。
- 代码复用:可以重用现有的对象,减少重复代码。
- 灵活:可以在运行时动态地创建对象,增加了系统的灵活性。
缺点
- 深拷贝和浅拷贝问题:需要特别注意对象的深拷贝和浅拷贝问题,否则可能会导致意外的行为。
- 类设计复杂:每个需要克隆的对象都需要实现 Clone 方法,增加了类的设计复杂度。
- 安全性问题:如果对象包含敏感数据,克隆时需要注意数据的安全性。
- 内存消耗:每次创建新文档时都会生成一个新的 Document 对象并将其推入栈中,可能会导致较大的内存消耗,尤其是在频繁创建和撤销文档的情况下。
- 性能问题:如果文档非常大,克隆操作可能会比较耗时,影响性能。
总结
这个示例展示了如何使用状态模式和克隆模式来实现文档编辑器的撤销功能。通过将文档的历史版本存储在栈中,并在需要时进行撤销操作,可以有效地管理文档的状态变化。同时,通过实现 ICloneable 接口,确保每次创建新文档时都能获得一个独立的副本,保证了文档状态的独立性。
相关文章:
C#设计模式--原型模式(Prototype Pattern)
原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需通过构造函数。这种方式可以提高性能,特别是在创建复杂对象时。C# 中可以通过实现 ICloneable 接口或自定义克隆方法来实现原型模式。 案例 1:文档编辑器…...
使用Goland对6.5840项目进行go build出现异常
使用Goland对6.5840项目进行go build出现异常 Lab地址: https://pdos.csail.mit.edu/6.824/labs/lab-mr.html项目地址: git://g.csail.mit.edu/6.5840-golabs-2024 6.5840运行环境: mac系统 goland git clone git://g.csail.mit.edu/6.5840-golabs-2024 6.5840 cd 6.5840/src…...
使用kibana实现es索引的数据映射和索引模版/组件模版
1 数据映射 数据映射官方链接 1.1 日期映射案例 1.创建一条索引。把索引中的字段生日映射为日期,并制定映射后的格式为年月日 PUT http://10.0.0.91:9200/zhiyong18-luckyboy-date {"mappings": {"properties": {"birthday": {&q…...
基于elementui的远程搜索下拉选择分页组件
在开发一个练手项目的时候,需要一个远程搜索的下拉选择组件; elementui自带的el-select支持远程搜索;但如果一次性查询的数据过多;会导致卡顿。故自己实现一个可分页的远程下拉选择组件 效果: 代码: <…...
每日一题 LCR 074. 合并区间
LCR 074. 合并区间 对遍历顺序注意一下就可以 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {int n intervals.size();sort(intervals.begin(),intervals.end());int idx 0;vector<vector<int&g…...
Flink SQL
Overview | Apache Flink FlinkSQL开发步骤 Concepts & Common API | Apache Flink 添加依赖: <dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-api-java-bridge_2.11</artifactId><version>…...
[免费]SpringBoot+Vue企业OA自动化办公管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue企业OA自动化办公管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue企业OA自动化办公管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术在管理上越来越深入…...
Linux下编译安装METIS
本文记录Linux下编译安装METIS的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1 一、安装依赖 1.1 下载GKlib sudo apt-get install build-essential sudo apt-get install cmake 2.2 编译安装GKlib 下载GKlib代码, …...
LLM学习路径 - 渐进式构建知识体系
LLM学习路径 - 渐进式构建知识体系 文章目录 LLM学习路径 - 渐进式构建知识体系一、模型算法基础二、机器学习三、深度学习四、自然语言处理 (NLP)五、大规模语言模型 (LLM) References 一、模型算法基础 编程基础 Web 框架 深入学习 Gradio 与 Streamlit,理解其构…...
使用Unity脚本模拟绳索、布料(碰撞)
效果演示: 脚本如下: using System.Collections; using System.Collections.Generic; using UnityEngine;namespace PhysicsLab {public class RopeSolver : MonoBehaviour {public Transform ParticlePrefab;public int Count 3;public int Space 1;…...
Qt Chart 模块化封装曲线图
一 版本说明 二 完成示例 此文章包含:曲线轴设置,曲线切换,单条曲线显示,坐标轴。。。 三 曲线图UI创建 在UI界面拖放一个QWidget,然后在 Widget里面放一个 graphicsView 四 代码介绍 1 头文件 #include <QString> #in…...
【Linux】深入理解进程管理与fork系统调用的实现原理
【Linux】深入理解进程管理与fork系统调用的实现原理 进程基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类组织进程 查看进程通过系统调用获取进程标示符Fork 之后的代码共享1. **代码共享**2. **数据段不共享**总结 🌏个人博客主页:个人…...
C语言程序设计P5-2【应用函数进行程序设计 | 第二节】——知识要点:函数的参数及返回值和函数的调用及声明
知识要点:函数的参数及返回值和函数的调用及声明 视频: 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 1.求x的n次方的值也就是求n个x的乘积,可把x和n作为函数的形参,定义一个函数power来完成这个功能&am…...
【LeetCode】169.多数元素
题目连接: https://leetcode.cn/problems/majority-element/solutions/2362000/169-duo-shu-yuan-su-mo-er-tou-piao-qing-ledrh/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述: 思路一: 使用哈希表unordered_map记录每个元…...
0x0118消息 WM_SYSTIMER
0x0118消息就是WM_SYSTIMER 编辑框出现输入光标时,产生的消息. 0x0118 would be the undocumented WM_SYSTIMER, which appears to be used for caret blinks. 0x0118是一个undocument 消息, 微软没有记录。 但在一些库的源码中可以看到,比如ATL的库文…...
【Linux内核】Hello word程序
创建测试目录 mkdir -p ~/develop/kernel/hello-1 cd ~/develop/kernel/hello-1 创建MakeFile文件和内核.c文件 nano Makefile nano hello-1.c 编写内容 /* * hello-1.c - The simplest kernel module. */ #include <linux/module.h> /* Needed by all modules */…...
黑马redis
Redis的多IO线程只是用来处理网络请求的,对于读写操作命令Redis仍然使用单线程来处理 Redisson分布式锁实现15问 文章目录 主线程和IO线程是如何协作的Unix网络编程中的五种IO模型Linux世界一切皆文件生产上限制keys *、flushdb、flushall等危险命令keys * 遍历查询100W数据花…...
Robust Depth Enhancement via Polarization Prompt Fusion Tuning
paper:论文地址 code:github项目地址 今天给大家分享一篇2024CVPR上的文章,文章是用偏振做提示学习,做深度估计的。模型架构图如下 这篇博客不是讲这篇论文的内容,感兴趣的自己去看paper,主要是分享环境&…...
集合框架(3)Map
Map接口 现实生活与开发中,我们常会看到这样的一类集合:用户ID与账户信息、学生姓名与考试成绩、IP地址与主机名等,这种一一对应的关系,就称作映射。Java提供了专门的集合框架用来存储这种映射关系的对象,即java.util…...
Java反射机制—Class
Java反射机制是指在运行时动态地获取类的信息以及操作类的成员变量、方法和构造方法的能力。反射机制通过使用Class类来实现,Class类是Java中表示类的类。 通过反射机制,我们可以在运行时动态地创建对象、调用方法、访问属性等。反射机制提供了一种强大…...
C# 新语法中的字符串内插$和{}符号用法详解
自C#6.0开始提供一个新的语法糖,即"$" 符号,配合“{}”使用,它的作用除了是对String.format的简化,还可设置其格式模板,实现了对字符串的拼接优化。 语法格式: $"string {变量表达式}” 语…...
WordPress 独立站是否需要 CDN:深度解析及必要性分析
WordPress 是目前全球最流行的开源内容管理系统(CMS),其易用性和丰富的插件生态使得它成为搭建独立站的首选。然而,随着流量的增加以及用户体验的需求,网站的速度和可靠性变得至关重要。在这种情况下,CDN&a…...
dell电脑开不了机怎么回事?戴尔电脑无法开机解决方法
dell戴尔电脑开不了机,这是很多使用dell电脑用户常遇到的问题。这种故障情况是由多种原因引起,包括硬件故障、软件问题或电源问题等等。dell电脑开不了机怎么办呢?下面便为大家介绍一下相关解决修复方法,帮助用户解决戴尔电脑无法…...
如何解决 JavaScript 中的数组方法不生效?
在 JavaScript 中,数组方法是常用的工具,可以用来对数组进行操作。常见的数组方法包括 push(), pop(), shift(), unshift(), map(), filter(), reduce() 等。 然而,有时候我们会遇到数组方法“失效”或者不按预期工作的情况。这个问题的原因…...
道可云人工智能元宇宙每日资讯|全国工商联人工智能委员会成立会议在南京举办
道可云元宇宙每日简报(2024年12月5日)讯,今日元宇宙新鲜事有: 全国工商联人工智能委员会成立会议在南京举办 全国工商联人工智能委员会成立会议日前在江苏省南京市举办。中央统战部副部长、全国工商联党组书记沈莹出席会议并讲话…...
华为HCIP-Datacom H12-821H12-831 (12月最新题库)
备考HCIP-datacom的小伙伴注意啦 !!! 2024年下半年12月份最新(H12-821和H12-831)题库带解析,有需要的小伙伴移动至文章末 H12-821: H12-831: 1.BGP 邻居建立过程的状态存在以下几种:那么建立一个成功的连接所经历的状态机顺序是 A、3-1-2-5-4 B、1-3-5-2-4 C、…...
模型案例:| 手机识别模型!
导读 2023年以ChatGPT为代表的大语言模型横空出世,它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力,为人工智能技术的发展开辟了新的可能性。同时,人工智能技术正在进入各种应用领…...
AWS创建ec2实例并连接成功
aws创建ec2实例并连接 aws创建ec2并连接 1.ec2创建前准备 首先创建一个VPC隔离云资源并且有公有子网 2.创建EC2实例 1.启动新实例或者创建实例 2.创建实例名 3.选择AMI使用linux(HVM) 4.选择实例类型 5.创建密钥对下载到本地并填入密钥对名称 6.选择自己创建的VPC和公有子网…...
短视频矩阵系统开发|技术源代码部署
短视频矩阵系统通过多账号运营管理、多平台视频智能分发等功能,助力企业实现视频引流、粉丝沉淀和转化。 短视频矩阵系统是一种创新的营销工具,它整合了多账号管理、视频智能分发、数据可视化等多种功能,为企业在短视频领域的发展提供了强大…...
C# GDI绘制的小熊进度条
C# GDI小熊进度条 1、添加自定义控件winform using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;…...
java书 核心技术+卷一+4
5.4 对象包装器与自动装箱 package 反射; import java.util.AbstractList; import java.util.ArrayList; public class test {public static void main(String[] args) {int a10;ArrayList<Integer> xxnew ArrayList<>();xx.add(a); //自动装箱int bxx.get(0);//…...
用Python开发一个经典打砖块小游戏
Python 的 pygame 库让我们可以轻松开发经典的小游戏。今天,我们将实现一个“打砖块”小游戏,带你体验游戏开发的乐趣。 一、游戏设计 1.1 游戏规则 玩家通过移动滑板接住弹起的球。球撞击砖块会让砖块消失,玩家得分。如果球落地,游戏失败。1.2 技术点 碰撞检测:检测球与…...
RTCMultiConnection 跨域问题解决
js套件地址 https://github.com/muaz-khan/RTCMultiConnection server套件地址 https://github.com/muaz-khan/RTCMultiConnection-Server 要解决的就是server代码的跨域问题 原装写法: 解决写法: // 喜欢组合语法的自己组 const io new ioServer.S…...
使用GO--Swagger生成文档
概述 在前后端分离的项目中,后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger 是一个功能全面且高性能的Go语言实现工具包,用于处理Swagger 2.0(即OpenAPI 2.0)规范。它提供了丰富的工具集&#x…...
简易图书管理系统
javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…...
探索自然语言处理奥秘(NLP)
摘要 自然语言处理(NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音,并与人类进行基本的对话交流。 通俗理解 自然语言处理(NLP)…...
刘铁猛C#入门 030 泛型,partial类,枚举,结构
泛型(generic)无处不在 为什么需要泛型:避免成员膨胀或者类型膨胀 正交性:泛型类型(类/接口/委托/......)泛型成员(属性/方法/字段/....类型方法的参数推断 泛型接口/类的 类型参数不只有一个泛型与委托、lambda表达式实现泛型接口类时 ,实现…...
迅雷 11.2.2 | 本地会员版,不限速下载,支持云盘
迅雷 v11.2.2 是一款带网盘功能的绿色版下载工具。双击“!)绿化”文件即可在桌面生成快捷图标。该版本干净简洁,仅保留下载和云盘两项核心功能。点击左上角的【新建】按钮,可新建链接下载任务。即使在网络条件一般的情况下(如50M宽带…...
P3131 [USACO16JAN] Subsequences Summing to Sevens S
题目描述 Farmer Johns NN cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to take a photo of a contiguous group of cows but, due to a…...
股指期货基差为正数,这是啥意思?
在股指期货的世界里,有个挺重要的概念叫“基差”。说白了,基差就是股指期货的价格和它对应的现货价格之间的差价。今天,咱们就来聊聊当这个基差为正数时,到底意味着啥。 基差是啥? 先复习一下,基差 股指…...
docker自动拉取最新镜像并更新
目录 一、自动检查和更新所有正在运行的容器(每24h一次) 二、仅仅更新特定的容器(每24h一次) 三、指定更新间隔(300秒) 四、Watchtower 不会主动删除旧镜像,使用 --cleanup 参数在更新容器后…...
unicloud微信小程序云端一体项目DEMO
最近应客户需求,做了一个产品展示的云开发小程序,从了解云开发到应用到实际项目的产品demo,希望大家能从中获取到对自己有用的东西。 说下心得体会吧,一般小项目用这种云开发确实会减少很多开发成本,人力成本…...
Spring+Mybatis 整合所需准备
文章目录 SpringMybatis SpringMybatis 准备pom.xml 项目所需jar文件 <spring.version>4.0.2.RELEASE</spring.version> <!-- spring框架包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</a…...
后端工程师成长路线图
后端开发工程师是软件开发领域中的一个重要角色,主要负责平台设计、接口设计和功能实现。他们的主要职责包括服务器端业务开发、架构设计、系统性能调优等。 后端开发工程师的工作内容通常涉及服务器开发、数据库管理、业务逻辑实现等方面。他们需要与前端工程…...
java -jar ./target/pay.war ./target/pay.war 中没有主清单属 为什么?
当你尝试使用 java -jar ./target/pay.war 来启动你的 WAR 包时,遇到的错误是因为该 WAR 包没有包含主清单属性(Main-Class)。这是因为你的项目是一个 Spring Boot 项目,并且默认是作为 WAR 文件部署到外部容器(如 Tom…...
封闭式论文写作--全面掌握ChatGPT-4o的写作技能,掌握提示词使用技巧、文献检索与分析方法,帮助您选定研究方向,提炼学术论文题目
在当今学术研究中,科研人员在撰写论文时面临诸多挑战。首先是信息量的剧增,科研人员需要快速消化新知识,筛选相关信息并清晰表达。但论文写作不仅是信息的罗列,还需要条理清晰、逻辑严密、语言精准,特别是在竞争激烈的…...
解决Centos6.9的yum的失效问题
相信大家,如果遇到了yum问题的话,经常会很头疼,因此,这里给出了两条命令,这里的前提是你的wget是能用的 1、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2、wget -O /etc/yum.re…...
【日常记录-Java】查看Maven本地仓库的位置
1. 简介 Maven本地仓库主要用于存储和管理项目所需的依赖项,如jar包、pom文件等。默认情况下,其位于用户家目录下的.m2/repository文件夹内。开发者也可以在Maven的配置文件settings.xml中修改本地仓库路径。 2. 方法 2.1 查看settings.xml文件 Maven本…...
软件测试丨Web自动化测试用例录制与编写全攻略
Web自动化测试的功能简介 Web自动化测试主要是使用特定的工具或框架自动执行对Web应用程序进行的测试。通过模拟用户的操作,自动化测试能够验证应用程序的功能及性能。这一过程的大致流程是: 用例设计:明确测试目标、场景及所需功能。录制测…...
.Net学习
1 什么是.NET Core .NET是开发平台,.NET Framework、.NET Core、Xamaarin/Mono的统称。 .NET Framework是只能在Windows上开发的技术 .NET Core是可以跨平台开发的技术 Xamaarin/Mono是移动端开发的技术 .NET Core:跨平台、免费、开源,可…...