C#编程
文章平均质量分 89
莫之
不努力奔跑,怎么能停在原地
展开
-
C#异步编程:TPL与Async&Await
一、TPL基础线程池所提供的抽象帮助程序员封装了线程使用的细节,使我们可以专心处理程序逻辑,而不是各种线程问题;.Net4.0引入了TPL,并在4.5进行了进一步完善;任务并行库(Task Parallel Library)可以被认为是线程池之上的又一个抽象层,它对程序员隐藏了与线程池交互的底层代码,并提供了更方便的细粒度的API;C#5.0已经内置了对TPL的支持,允许开发者使用新的await和async关键字以平滑、舒服的方式操作任务;TPL的核心概念是Task(任务),一个任务代表了一个异原创 2020-11-02 01:54:28 · 806 阅读 · 0 评论 -
C# foreach和迭代器
是什么让类成为集合,IEnumerable<T>.NET中的几何本质上是一个类,它实现了IEnumerable<T>或非泛型类型IEnumerable;任何一个集合如果想支持对集合执行遍历操作,就必须要实现该接口;foreach遍历数组“运行时”不是直接支持foreach语句来遍历数组,C#编译器会对代码进行必要的转换;C#编译器会用CIL来创建一个等价的for循环,注意foreach要依赖于数组的Length属性和数组索引操作符的支持,知道Length属性的值后,C原创 2020-11-01 19:00:05 · 1082 阅读 · 0 评论 -
编程语言的类型系统
一、类型系统类型系统用于将编程语言中的数值和表达式归类为许多不同的类型,类型系统在各种语言之间有很大不同,最大的差异存在于编译时期的语法以及运行时期的操作方式;二、类型安全类型安全是指同一段内存在不同的地方,会被强制要求使用相同的办法来解释(内存中的数据是用类型来解释的);C语言不是类型安全的,因为同一段内存可以用不同的数据类型来解释,比如1用int来解释就是1,用boolean来解释就是true;有的语言(尤其是C和C++)允许做一些非常“不正当”的事情。但在合适的时候,其功能可能会很原创 2020-10-28 01:56:47 · 387 阅读 · 0 评论 -
C# 装箱和拆箱
C#中值类型和引用类型都可以和object类型进行转换;装箱转换是指将一个值类型显式或隐式地转换成一个object类型;把一个值类型的值装箱,就是创建一个object类型然后将这个值复制给这个object,装箱后的object对象数据放在堆中;所谓的拆箱,就是复制堆中的对象到堆栈中,并且返回它的值;对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算;装箱和拆箱的性能问题主要通过泛型来解决;...原创 2020-11-07 14:51:58 · 2077 阅读 · 0 评论 -
认识 Unity C# Job System
一、认识Job SystemUnity C# Job System是用于写多线程代码的,使用多线程能够带来高性能,提高code generation的质量,减少移动设备的耗电量等;二、什么是多线程单线程:多线程:线程池:...原创 2020-06-29 23:46:13 · 743 阅读 · 0 评论 -
Unity IL代码注入(基础)
一、什么是代码注入C#程序编译生成中间代码IL,为了实现问题修复和一些通用功能扩展,通常所使用的就是代码注入。xlua的热修复方案即采用了代码注入的方式,没有污染C#代码,也不需要提前埋点,十分方便。再比如这篇文章讲述了使用代码注入来做一些工具,:自动注入代码统计每个函数的执行效率以及内存分配方案代码注入需要借助一个注入工具,就是Mono.Cecil开发包,它可以让我们对编译好的程序集进行IL代码注入。http://www.mono-project.com/docs/tools+li原创 2020-06-25 14:30:07 · 2684 阅读 · 0 评论 -
C# 多线程(一)- 了解多线程的基本概念
一、多线程基础、1.多线程术语CPU或内核是实际执行指定程序的指定单元,现在一个CPU通常也支持多线程;进程,指给定程序当前正在执行的实例,操作系统一个主要功能就是管理进程;单线程程序只仅包含一个线程的进程,对应的是多线程程序;线程安全:在多线程程序中具有正确的表现线程处理模型:指代码向调用者提出一些调用规范,只有满足这些规范要求才能保证线程安全;线程池:指多个线程的集...原创 2020-06-02 11:15:08 · 374 阅读 · 0 评论 -
C#虚函数virtual机制
看一下如下这段代码,思考它的结果应该是什么using System;namespace test{ class Program { class A { public A() { func(); } virtual public void func() { Consol原创 2020-05-28 18:45:10 · 487 阅读 · 0 评论 -
C#扩展方法
一、简单认识扩展方法Extension Methods当我们需要扩展现有类型时,我们通常需要创建一个新类型继承自父类来完成,但是扩展方法可以让我们向现有的类型中添加一些方法,达到扩展的目的;扩展方法时一个特殊类型的静态方法,但是它们会像扩展类型的实例方法一样被调用;在unity中,我们通常会根据项目需要为GameObject以及各种组件做出自己需要的扩展;二、如何实现和调用一个自定...原创 2020-01-10 12:51:08 · 148 阅读 · 0 评论 -
C# Dictionary遍历删除
一、C#遍历删除的两种方式观察如下代码:我们希望去除80分一下的同学名称;Dictionary<string,int> students=new Dictionary<string, int>();students.Add("xiaoming",90);students.Add("xiaohong",80);students.Add("xiaolan",70...原创 2020-01-06 20:10:14 · 18460 阅读 · 5 评论 -
C# 反射与特性
一、一些基本概念程序集:程序集是为协同工作而生成的类型和资源的集合,这些类型和资源构成了一个逻辑功能单元。程序集向公共语言运行时提供了解类型实现所需要的信息。对于运行时,类型不存在于程序集上下文之外。元数据:程序集中包含元数据;类型:System.Type类是反射的中心,当反射提出请求时,CLR为已加载的类型创建 Type ,可使用 Type 对象的方法、字段、属性和嵌套类来查找...原创 2019-12-25 15:31:41 · 577 阅读 · 0 评论 -
C# 自动内存管理
一、垃圾回收VES内置了垃圾回收支持,垃圾回收器只负责内存管理,它没有提供一个自动的系统来管理与内存无关的资源。.NET的垃圾回收多数CLI实现使用一个分代的(generational)、支持压缩的(compacting)、以及基于mark-and-sweep(标记并清除)的算法回收内存。分代的:是因为只存活过短暂时间的对象与已经在垃圾回收时活下来的对象(原因是对象仍在使用)相比,前者会...原创 2019-09-01 17:45:20 · 496 阅读 · 0 评论 -
C# 属性与字段
1.为什么会有属性?我们希望字段是只读的,也就是只能访问这个变量而不能修改,private和public等限定符同时限制了它的读写;再者,希望对变量赋值时有条件验证等;在java或其它语言中,我们通常会将一个变量来声明为一个私有变量,然后为其编写set和get方法;C#则用属性的概念显式支持这一编程模式。2.属性是成员函数,不属于成员变量;属性的关键特点在于:它提供了从编程角度看类似于...原创 2019-11-04 13:51:23 · 354 阅读 · 0 评论 -
unity中的值类型和引用类型
一、值类型和引用类型概念值(value)类型 :Unity中的vector3、quaternion是structs,它们是值。引用(feference)类型 :Unity中的transform、gameobject是类类型,所以它们是引用。引用类型是对数据存储位置的引用,引用类型指向的内存区域称为堆。在决定定义引用类型还是值类型时,关键因素是:如果逻辑上是固定大小不可变的值,就考虑定义...原创 2019-08-14 16:32:53 · 7634 阅读 · 4 评论 -
Unity编辑器扩展
前言:该文章主要介绍unity的几个扩展属性一、ContextMenu上下文菜单属性主要是为了给上下文菜单添加一些命令,而且是给脚本组件添加的上下文菜单。(最后遇到MenuItem组件,也可以添加一些组件的上下文菜单,不过那个主要为内置组件添加(也可以为当前已有的脚本组件添加),而ContextMenu是为当前脚本组件添加)示例代码:新建了一个menu脚本文件,然后添加如下代码,...原创 2019-07-23 09:46:46 · 192 阅读 · 0 评论 -
List<T> Sort()的各个重载方法
一、四个重载版本public void Sort();public void Sort(Comparison<T> comparison);public void Sort(IComparer<T> comparer);public void Sort(int index, int count, IComparer<T> comparer);1....原创 2019-08-13 17:44:27 · 1149 阅读 · 0 评论 -
C# List<T>
一、列表集合List<T>概述首先提供官方参考文档:List<T> Class概述:Namespace:System.Collections.Generic;List类是一个泛型类,它与数组类似,区别在于随着元素数量增多,列表长度会自动扩展;类的声明及初始化:List<T> list=new List<T>();属性方法...原创 2019-08-13 18:41:31 · 549 阅读 · 0 评论 -
C# Dictionary
一、概述Namespace:System.Collections.Generic字典集合特点是存入对象是需要与[key]值一一对应的存入该泛型,通过某一个一定的[key]去找到对应的值。名称是独一无二的键,相当于数据库里的主键,键可以为任意数据类型,而不仅仅是数值或字符串。声明与初始化:Dictionary<string ,string> info=new Dict...原创 2019-08-13 20:06:56 · 492 阅读 · 0 评论 -
C# 接口和抽象类的区别
一、抽象类抽象类是仅供派生的类,无法实例化抽象类,只能实例化它派生的类。定义抽象类和抽象成员时,要为其添加abstract修饰符。不可实例化只是抽象类的一个次要的特征,其主要特征是它包含抽象成员。抽象成员不能声明为私有,否则,派生类无法找到它们。二、接口1.和抽象类不同,接口不包含任何实现,而且,接口能把提供的服务和实现细节完全隔离开。2.关键特点:既不包含实现,也不包含数据。...原创 2019-08-11 14:38:46 · 1599 阅读 · 0 评论 -
C# 抽象类
一、抽象类的基本概念抽象类是仅供派生的类,它不可以实例化,只能实例化从它派生的类;抽象类的定义:在类声明前添加Abstract关键字抽象方法没有函数实体,声明如下public abstract void create();类的特征:主要特征是抽象类会包含抽象成员,抽象成员是没有实现的方法或属性,它将强制派生类提供实现;阐释:抽象类中的抽象成员定义了从抽象类派生的类应该包含...原创 2019-08-11 14:08:25 · 224 阅读 · 0 评论 -
C# 接口(Interface)
一、接口的概念接口也是用来实现多态的一种方式,所以多态性是接口的重要特性和功能;虽然C#类是单继承的,但是可以实现多个接口,接口只是定义了一组成员,不包含实现,类型通过实现接口来自己定义它的功能;接口规定了要做什么事,但没有规定具体如何完成,而接口实现关系就是一种“能做”关系,类型定义时继承了接口就说明该类型“能做”接口所规定的事情,而且是必须做,在类型中实现接口的类型必须要使用接口要求的...原创 2019-08-11 14:38:05 · 455 阅读 · 0 评论 -
C#字符串
理解C# String类型:特殊的引用类型C# String类型是值类型还是引用类型?一句话总结就是,它是特殊的引用类型。有关C# String类型究竟是值类型还是引用类型,在很多C#学习者中都或多或少造成过困惑。好比下面这个例子:classClass1 { staticvoidStrChange(stringstr) { ...原创 2019-08-11 13:35:10 · 120 阅读 · 0 评论 -
C# 修饰符
一、Virtual修饰符在基类中,必须将所有允许重写的方法声明为virtual,(Abstract除外,抽象成员默认可以重写);在派生类进行重写时必须显式添加override修饰符,该方法默认可以重写,如果不希望该方法可以继续重写,则需要使用seal修饰符;重写基类方法时,不可以修改方法的访问修饰符;...原创 2019-08-11 14:20:02 · 121 阅读 · 0 评论 -
C# 泛型
一、初步理解泛型泛型是概念,它是独立于语言的概念,泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是...原创 2019-08-11 15:28:27 · 116 阅读 · 0 评论 -
C# 委托
一、认识委托随着类与类之间关系的复杂,类与类之间的调用将会使用一些常见的模式。一种常见的模式是向方法传递对象,该方法再去调用该对象的一个方法。例如,向方法传递一个IComparere<int>的接口引用,这样就可以调用传入对象的Compare()方法。这种情况下,接口类型的作用只是向最终被调用的那个方法传递一个引用。二、委托的声明与实例化委托类似于函数指针,它允许捕捉对方法...原创 2019-08-11 16:45:21 · 469 阅读 · 0 评论 -
C# 多播委托与事件
一、回顾委托1.发布-订阅模式委托本身是一个更大的模式的基本单位,这个模式称为发布-订阅。委托的使用及其对publish-subscribe模式的支持是需要学习的重点。虽然,很多问题都可以单独用委托来实现,但是事件构造提供了额外的“封装”,使publish-subscribe模式更容易实现,更不容易出错。2.多播委托与观察者模式观察者模式:需要将单一事件的通知广播给多个订阅者一个...原创 2019-08-11 18:28:16 · 1357 阅读 · 1 评论 -
VS调试技巧
一、调试步骤命令F5:逐断点执行,执行到下一断点;F10:step over,逐过程执行,不进入到函数内,一般逐行执行用F10,如果有需要进入更具体的函数的,再用F11进入到函数,用Shift+F11出来;F11:step into,逐语句执行,会进入到函数内;也可以通过对调用的函数设置断点进入到函数内;Shift+F11:step out,跳出当前函数,二、断点几种类型普...原创 2019-08-24 15:44:20 · 1111 阅读 · 0 评论 -
C# CLI
一、初步认识CLICLI--Common Language Infrastructure,它是C#语言编译和执行时都要依赖的公共语言基础结构;与其它高级语言不同的是,C#编译生成的不是处理器直接解释的指令,而是一种中间语言指令,这种中间语言就是公共中间语言CIL--Common Intermediate Language,简称IL。第二个编译步骤通常在执行时发生,这个步骤中,CIL被转为...原创 2018-07-18 15:31:09 · 2136 阅读 · 0 评论