C#
ZJ.WANG
这个作者很懒,什么都没留下…
展开
-
(设计模式学习笔记)五、接口隔离原则
一、接口隔离原则定义:客户端不应该依赖那些不需要的接口。一旦一个接口太大,则需要将他分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。二、分析接口隔离原则是指使用多个专门的接口(抽象类也是接口),而不使用单一的总接口。每一个接口应该承担一种相对独立的角色。一个接口就只代表一个角色,每个角色都有它特定的一个接口,此时这个原则可以叫做“角色隔离原则”。接口仅仅提供客户端需要的行为,即所需的方法,客户端不需要的行为原则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不需要提供大原创 2020-08-09 10:23:09 · 214 阅读 · 0 评论 -
(C#设计模式学习笔记)一、面向对象的根本性问题及松耦合与紧耦合
1.封装、继承、多态封装,隐藏内部实现继承,复用现有代码多态,改写对象行为继承是以封装为基础的,多态是以继承为基础的。封装,侧重于对象的描述。继承和多态,侧重于对象之间的关系描述。2.从编程语言直观了解面向对象通过面向对象编程语言(OOPL)认识到的面向对象,并不是面向对象的全部。OOPL的三大机制“封装、继承、多态”可以表达面向对象的所有概念,但是这三大机制没有刻画出面向对象的核心精神。3.面向对象的根本性问题我们为什么要使用面向对象?我们应该怎样使用三大机制来实现好的面向对象原创 2020-07-25 21:59:33 · 1011 阅读 · 0 评论 -
(C#设计模式学习笔记)二、面向对象设计的七大原则及单一职责原则、开放封闭原则分析
一、面向对象的七大设计原则设计原则名称设计原则简介1.单一职责原则(SRP)类的职责要单一,不能将太多的职责放在一个类中2.开闭原则 (OCP)软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能3.里式代换原则(LSP)在一个可以接受基类对象的地方必然可以接受一个子类对象4.依赖倒转原则(DIP)要针对抽象层编程,而不要针对具体类编程5.接口隔离原则(ISP)使用多个专门的接口来取代一个统一的接口6.合成复用原则原创 2020-07-26 15:20:41 · 215 阅读 · 0 评论 -
(设计模式学习笔记)四、里氏代换原则
一、里氏代换原则1.定义所有引用基类(父类)的地方必须能够透明地使用其子类的对象。2.案例有一个父类:public abstract class A{}有两个子类都继承父类A:public class B:A{}public class C:A{}那么用里氏代换原则就可以:A a=new B();A a=new C();但是不可以:B b=new A();例如有两个类,一个类为BaseClass,另一个是SubClass,并且BaseClass是SubClass的子类,那原创 2020-08-07 18:34:50 · 131 阅读 · 0 评论 -
(C#设计模式学习笔记)三、面向对象设计的依赖倒置原则
一、依赖倒置原则1.定义:高层模块不应该依赖底层模块,他们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。另外一种表述为:要针对接口编程,不要针对实现编程。依赖倒置原则的中心思想是面向接口编程。2.原则:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构,比以细节为基础搭建起来的架构要稳定的多。3.类之间的耦合:零耦合关系具体耦合关系抽象耦合关系依赖倒置原则要求客户端依赖于抽象耦合,以抽象方式耦合是依赖倒转原则的关键。二、依赖倒置原则案例使用依赖倒置原原创 2020-07-27 12:32:13 · 188 阅读 · 0 评论 -
Unity3D委托与事件
转载于:https://www.jianshu.com/p/fc7fdb3e677a1: 定义一个委托的类型。委托是一种容器,容器里面放的是函数方法。而函数的形式各不相同,参数,返回值各不相同,所以你做委托之前,先得要定义好这个委托容器存放的函数的类型,即委托类型。delegate voidDelegate_func(参数1, 参数2)这句是定义了一个Delegate_func的委托类型,里面存放的函数的类型为: void Delegate_func (参数1, 参数2)2: 定义一个委托容器变转载 2021-03-23 16:24:23 · 274 阅读 · 0 评论 -
Unity3D中transform组件Roation变量详解
Unity3D中transform组件是最基础的也是最重要的物体属性,transform面板中有Position,Rotation,Scale三个属性.今天我在赋值参数的时候发现transform组件中的rotation输出的值和面板中显示的(X,Y,Z)三个参数不一样,而且输出的是四个参数,如下图:void Start () { Debug.Log(transform....原创 2020-03-31 14:54:37 · 2351 阅读 · 0 评论 -
Unity3D中ref和out
ref和out 都是按地址传递的,使用后都将改变原来的数值。别人总结的两个区别为:ref是有进有出,out是只出不进。1.ref参数作用:将一个变量传入一个函数中进行"处理","处理"完成后,再将"处理"后的值带出函数。语法:使用时形参和实参都要添加ref关键字。测试:using System.Collections;using System.Collections.Generic;using UnityEngine;public class NewBehaviourScript :原创 2020-05-16 14:29:18 · 1599 阅读 · 1 评论 -
Unity3D中的Transform.forward与Vector3.forward
1.Transform.forwardTransform.forward指当前物体的坐标系(局部坐标系)的Z轴指向世界坐标系的Z轴(官方文档中的蓝色轴就代表Z轴)。如果当前物体旋转,当前物体坐标系(局部坐标系)会随着物体物体一起旋转。2.Vector3.forwardVector3.forward指(0,0,1),而且此处的(0,0,1)是指世界坐标系中的三维向量,当物体旋转时Vector3.forward不会随着物体局部坐标系的改变而改变,仍然指向世界坐标系的(0,0,1)。...原创 2020-05-15 15:42:02 · 2908 阅读 · 1 评论 -
Unity3D中Mathf数学运算函数总结积累
1.Mathf.Clamp为了限制某一物体的移动不超过一定的范围,可以用Mathf.Clamp来解决。Mathf.Clamp(float value,float min,float max)在Mathf.Clamp中传入三个参数:value,min,max限制value的值在min,max之间,如果value大于max,则返回max2.Mathf.Signstatic function Sign (f : float) : floatDescription描述返回 f 的符号。当 f 为正或原创 2020-07-18 12:03:50 · 1426 阅读 · 1 评论 -
ROS#学习记录(ROS Comunicate with Unity3D by websocket)
4.开发者文件1.ROS-Unity坐标系统转换Unity中世界坐标系使用左手系,y轴向上;然而,ROS中世界坐标系使用右手系,Z轴向上。坐标轴转换:坐标轴UnityROSForwardZXRightX-YUpYZRotationclockwisecounter-clockwiseROS#中的脚本TransformExtensions.cs通过在两个平台上保持向前-向左-向上的约定来处理坐标系统转换。例如:ROS2Unitypubl原创 2021-03-17 22:31:46 · 2495 阅读 · 5 评论 -
Unity3D如何导入倾斜摄影OSGB格式数据?
我要疯了,哪位大佬有解决方案,可以在Unity3D中直接导入OSGB格式数据?已经尝试过,在Smart3D(CC)里面直接生成FBX格式文件,导入unity3D以后精度特别差,没有纹理失真了。原创 2020-05-20 08:40:17 · 4644 阅读 · 3 评论 -
(Unity-HDRP)RTHandle类
RTHandle类会随相机大小自动缩放。当不同大小的摄像机在渲染过程中使用时,这允许适当的重新利用Render Texture内存。NameSpace:UnityEngine.Rendering语法:public class RTHandle属性nameName of the RTHandlepublic string name {get;}...原创 2021-03-16 15:56:19 · 1150 阅读 · 0 评论 -
【Unity】Update,LateUpdate,FixedUpdate 的区别
转载于https://blog.csdn.net/qq_42351033/article/details/83047657在脚本的整个生命周期中,Unity 主要提供了3种更新方法Update():每一帧执行时,都会立即调用此方法。LateUpdate():LateUpdate 是在所有 Update 方法调用之后被调用(语出圣典)。FixedUpdate():固定更新。默认情况下,系统每0.02秒调用一次。 具体的间隔时间可以在 TimeManager 中配置(详见文末)。 区别 总体来说转载 2021-03-24 15:35:41 · 648 阅读 · 0 评论 -
(c#学习)Var关键字
var是3.5新出的一个定义变量的类型,var可以替代任何类型。编译器会根据上下来判断是什么类型的,例如:var a =100; 则a是整型,var a = “abc”;则a是字符型。var可以理解为匿名类型,是一个声明变量的占位符。它主要用在声明变量时,无法确定数据类型的使用。使用var定义变量时有以下四个特点:1、必须在定义时初始化,不能先定义后初始化。2、一旦初始化完成,不能再给变量赋值与初始化不同的值。3、var类型的变量必须是局部变量。4、使用var定义变量和object不同,它原创 2021-03-16 21:21:49 · 267 阅读 · 0 评论 -
(C#学习)implicit(隐式转换)和explicit(显示转换)
implicit用于声明隐式的用户自定义的类型转换运算符。如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。使用隐式转换操作符之后,在编译时会跳过异常检查,所以隐式转换运算符应当从不引发异常 并且从不丢失信息,否则在运行时会出现一些意想不到的问题。explicit声明必须通过显示的调用用户定义的类型转换符来进行转换。以下示例定义从 Fahrenheit 类转换为 Celsius 类的运算符。 必须在 Fahrenheit 类或 Celsius 类中定义转载 2021-03-16 18:36:30 · 406 阅读 · 0 评论 -
(C#学习)NativeArray<T0>
NativeArray在Unity.Collections命名空间中描述NativeArray将本地内存的缓冲区公开给托管代码,从而可以在托管和本地之间共享数据。属性1.IsCreated:表明NativeArray已经有一个已分配的内存缓冲区。2.Length:NativeArray中元素的数量。3.this[int]:通过索引访问NativeArray元素。注意结构体是按照值返回,并不是按照引用返回。公共方法1.CopyForm:从一个具有相同长度的nativeArray或托管数组中复制原创 2021-03-16 08:34:46 · 3543 阅读 · 0 评论 -
(C#学习)总结归纳Public Private Protected internalde 的区别
public对任何类和成员都是完全公开的,外部都可以调用。private是完全私有的,只有在类自己里面可以调用,在类的外部和子类都不能调用,子类也不能继承父类的private的属性和方法。protected可以被外界看到,但是外部不可以调用,只有自己及自己的子类可以调用,protected的属性和方法都可以被子类所继承和调用。internal同一程序集内部(在一个==.NET==项目中,这里的项目指单独的项目,而不是整个解决方案)可以调用,internal是类型和类型成员的访问修饰符。C#访原创 2021-03-15 19:58:11 · 191 阅读 · 0 评论 -
(C#学习)Attribute:AttributeUsage和反射
Attribute(特性)Attribute类将预定义的系统信息或用户定义的自定义信息与目标元素关联起来。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植的可执行文件模块、参数、属性、返回值、结构或其他属性。Attribute是C#的一种语言特性,用于为各种实体(Class,field,property)附加一些说明性信息,并且可以在运行时环境中检索这些信息(通过反射方式)。1.AttributeUsageAttributeUsage是Attribute的Attrib原创 2021-03-15 19:36:10 · 456 阅读 · 0 评论 -
C#中Queue(队列)的应用
转载于:https://www.cnblogs.com/dongh/p/6567409.htmlQueue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面。但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不通过,那么全部错误返回到界面,可能会让用户束手无策。我们有时候往往在一个流程中。只将Check流程中第一个不符合条件的错误提示给用户,让用户修改。首先我们就想到了队列,通过队列将所有的Check方法注册,然后依次出列。转载 2020-08-10 08:25:57 · 850 阅读 · 0 评论 -
C#语言中值类型(int、float等)后面加问号(int?、float?)代表什么?
示例:public float? SteerRate;public float? SteerTarget;public double? TimeStampSec;值类型后面加"?"表示可为null(Nullable结构),Nullable是.NET 2.0中新提供的一种用于标明一个值类型是否可以为空的技术。对于一个类型来说,如果既可以赋值,也可以分配空引用null,我们就可以说这个类型是可空的。例如示例中的,SteerRate、SteerTarget、TimeStampSec都是可空类型,原创 2020-07-20 15:38:36 · 1137 阅读 · 0 评论 -
C#中Interface接口使用
一.Interface的定义Interface接口定义了可由类和结构实现的协定。 接口可以包含方法、属性、事件和索引器。 接口不提供所定义成员的实现,仅指定必须由实现接口的类或结构提供的成员。二.Interface的使用1.接口使用Interface关键字声明,它于类的声明类似。接口的声明默认是public。2.接口不允许声明的成员有修饰符,接口是公有的。3.接口不能有构造函数,也不能有字段,接口不允许运算符重载。4.接口可以彼此继承,其方式和类的继承方式相同。三.Interface的用处1原创 2020-07-19 16:57:04 · 786 阅读 · 0 评论 -
IsNaN函数的使用
1、isNaN() 全局函数用于检查其参数是否是非数字值。2、语法:isNaN(x)参数 描述x 必需。要检测的值。3、返回值:如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 true。如果 x 是其他值,则返回 false。4、说明:isNaN() 函数可用于判断其参数是否是 NaN,该值表示一个非法的数字(比如被 0 除后得到的结果)。5、提示:如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或原创 2020-07-18 12:37:04 · 4246 阅读 · 0 评论 -
C#中Lambda表达式总结
在C#的语法中有一种比较特殊的写法,叫做Lambda表达式,这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查找学生的List<Student>集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode=‘1001’)语句来直接完成,无需再写繁琐的foreach语句或者for循环。Lambda表达式的运算符即为=>。一、Lambda表达式定义 Lambda表达..转载 2020-07-16 16:04:10 · 314 阅读 · 0 评论 -
(C#命名空间)using System
using SystemSystem命名空间包含基本类和基类,这些类定义常用的值和引用类型、事件和事件处理程序、接口、属性和异常处理。其他类提供的服务支持数据类型转换、方法参数操作、数学运算、远程和本地程序调用、应用程序环境管理和对托管与非托管的引用程序的监管。using System.IOSystem.IO命名空间包含允许读写文件和数据流的类型以及提供基本文件和目录支持类型。处理文件的操作(比如:Directory类,DirectoryInfo类,File类,FileInfo类,Stream类,原创 2020-07-13 17:24:38 · 2696 阅读 · 0 评论 -
(C#学习笔记)进程和线程的区别、异步委托开启线程、线程结束检测
一、进程和线程有什么区别?(面试题)进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。**在开销方面:**进程开销大,线程开销小。**所处环境:**在操作系统中能同时运行多个进程,而在同一个进程中有多个线程同时执行。**内存分配方面:**系统在运行的时候会为每个进程分配不同的内存空间,系统不会为线程分配内存。**包含关系:**线程是进程的一部分,进程可以包含多个线程,并且进程至少包含一个线程。二、线程的开启方式之一—异步委托...原创 2020-06-25 13:12:56 · 660 阅读 · 0 评论 -
(401-C#学习笔记)反射和特性-Type类、Assembly类、Obsolete特性
一.什么是反射?程序在运行时,可以查看其它程序集或其本身的元数据一个运行的程序查看本身的元数据或者其他程序集的元数据叫做反射。注:**元数据:**C# 编写的程序编译成一个程序集,程序集会包含元数据、编译代码和资源。元数据包含内容:清单信息,包括与程序本身有关的数据,以及它依赖的库;程序或类库中每一个类型的描述;在代码中嵌入的自定义特性,提供与特性所修饰的构造有关的额外信息。二.Type类预定义类型(int long和string等),BCL中的类型(Console,IEnumerabl原创 2020-06-23 19:04:01 · 299 阅读 · 0 评论 -
C#中String类型转换为Vector3类型
俗话说的好:基础不牢地动山摇~本人今天做服务器和客户端通信,需要将服务器转发的String类型转换为Vector类型,做了半天才做好。我在想这不是最基础的内容吗?当时学基础这么学的?哈哈哈接下来实现从String到Vector3类型的转换(一般从服务器转发过来的数据需要转换成Vector3类型):自己写了一个方法: public static Vector3 Parse(string st...原创 2020-03-30 19:34:14 · 3625 阅读 · 0 评论 -
C#中Dictionary用法
Dictionary<string, string>是一个泛型他本身有集合的功能有时候可以把它看成数组他的结构是这样的:Dictionary<[key], [value]>他的特点是存入对象是需要与[key]值一一对应的存入该泛型通过某一个一定的[key]去找到对应的值举个例子://实例化对象Dictionary<int, string> dic ...转载 2020-03-26 11:30:52 · 452 阅读 · 0 评论 -
C#-------实现简单的双色球彩票生成器
首先,介绍一下双色球彩票规则:一、投注方式1、标准投注从红球号码中选择6个号码,从蓝球号码中选择1个号码为一注,红球最多可选20个号码,蓝球最多可全选。单注最高奖金可达1000万元。2、胆拖投注在33个红球号码中选择1~5个号码作为每注都有的胆码,再补充其它不同的红球号码作为拖码进行投注,蓝球无胆码和拖码之分。单注最高奖金可达1000万元。3、单式上传将固定格式的单式号码统一上传给系...原创 2020-02-09 15:00:44 · 4270 阅读 · 0 评论