1k 1 分钟

# 模板模式 属于行为型模式。 一个抽象类公开定义了执行它的方法的方式 / 模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 # 类图 # 代码 # 抽象类及其子类 namespace BehavioralPatterns_TemplatePattern{ /// <summary> /// 形状 /// </summary> public abstract class Shape { /// <summary> /// 形状 ///...
4.5k 4 分钟

# 原型模式 属于创建型模式。 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 原型模式是通过拷贝一个现有对象生成新的对象,当直接创建对象的代价比较大时,则采用这种模式。 拷贝分为深拷贝和浅拷贝,接下来将分别介绍。 使用场景: 资源优化 类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等 性能和安全要求的场景 通过 new...
1k 1 分钟

# 代理模式 属于结构型模式。 代理模式为其他对象提供一种代理以控制对这个对象的访问。 按职责来划分,通常有以下使用场景: 远程代理 虚拟代理 Copy-on-Write 代理 保护(Protect or Access)代理 Cache 代理 防火墙(Firewall)代理 同步化(Synchronization)代理 智能引用(Smart Reference)代理。 # 类图 创建接口,由具体的类实现接口 创建代理类,实现接口 # 代码 # 接口 namespace StructuralPattern_ProxyPattern{ public interface...
1.5k 1 分钟

# 工厂方法模式 属于创建型模式。 定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。 如果新增一个产品,只需要在原有的基础上进行扩展就可以了。 # 类图 创建抽象类和具体的类 创建工厂接口,由具体的工厂类实现接口 # 代码 # 需要实例化的类 namespace CreationalPatterns_FactoryMethodPattern{ public abstract class Shape { /// <summary> /// 形状 /// </summary>...
3k 3 分钟

# 工厂模式 属于创建型模式,是常用的设计模式之一。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工厂模式,可以将对象的创建与使用代码分离,提供一种统一的接口来创建不同类型的对象。 优点 一个调用者想创建一个对象,只要知道其名称就可以了。 扩展性高,如果想增加一个产品,只需要增加这个产品的类就可以了。 屏蔽产品的具体实现,调用者只关心产品的接口。 缺点 使用 CSharp 反射动态创建对象会有性能消耗 一定程度上增加了系统的复杂度 # 类图 创建接口,由具体的类实现接口 创建工厂类,利用反射动态创建对象 # 代码 # 接口 namespace...
1.5k 1 分钟

# Unity 异常处理 在 Unity 中,当程序发生异常时,整个程序不会立即中断,因为 Unity 使用了异常处理机制来捕获和处理异常(Unity 全局异常处理)。正是因为这种异常处理的机制,在编写 Unity 脚本的时候很少会用到 try-catch...
2.4k 2 分钟

# C# 特性(Attribute) 特性(Attribute)用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。.Net 框架提供了预定义特性和自定义特性。 # 语法 [Attribute(parameter_A, parameter_B = value, ...)]# 预定义特性 .Net 框架提供了三种预定义特性: Obsolete Conditional AttributeUsage #...
2.7k 2 分钟

# C# 异常处理(Exception) 异常是在程序执行期间出现的问题。异常处理是对特殊情况的一种响应,比如尝试除以零。 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。 C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。 try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch () 块。 catch ():程序通过异常处理程序捕获异常。在 () 中输入需要捕获的异常的类型。 finally:finally 代码块中的语句不管是否抛出异常都会执行。 throw:当问题出现时,程序抛出一个异常。使用...