C#
文章平均质量分 79
王豫翔
这个作者很懒,什么都没留下…
展开
-
初步了解 Graph Engine
微软有很多非常小众的,但又很有趣的,但好像微软又不怎么样放在心上的技术。Graph Engine 就是这样的典型。2015年5月21日,当时的微软亚洲研究院老大,沈向洋宣布微软发布了一款图计算引擎Graph Engine。但实际上,这也不是微软新产品,Graph Engine其实是基于微软一款更早的产品Trinity的基础上做了增加,甚至你可以认为Graph Engine是Trinity的改名...原创 2020-03-26 08:00:13 · 860 阅读 · 0 评论 -
改进Face/Detect
改进Face/Detect现在Face/Detect和Face/Verify将支持将用户提交的结果持久化。我们先考虑下Face/Detect现在的变化,原先我们的流程是:从微信客户端获得mediaID,通过这个mediaID从微信服务器下载图片,然后将这个图片提交给牛津,以获得FaceIDCreated with Raphaël 2.1.0开始 get mediaid from wei原创 2020-03-25 21:59:35 · 252 阅读 · 0 评论 -
Random:随机值的处理:发牌游戏
伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了。Random 类的当前实现是基于 Donald E. Knuth 的减随机数生成器算法的,它提供我们产生随机的整数、双精度随机数和字节随机数。 以下是模拟投掷硬币两面的代码,需注意的是:Next产生的是从第一个参数开始,无限的趋向第二原创 2009-07-30 21:38:00 · 1666 阅读 · 0 评论 -
Hashtable:仅有两列的表
Hashtable集合和ArrayList、Stack和Queue都不一样,该集合可用看作是一个仅有两列的表格,第一列是键,存放的是唯一不可重复的值。第二列是值,随便放什么都可以。由于Hashtable这样的特征,所以这个集合不适合放置顺序的值,却可以放置些能被唯一标识的值。比如以下代码说明了这个现象: System.Collections.Hashtable phoneBook = ne原创 2009-07-30 21:38:00 · 1157 阅读 · 0 评论 -
结构化编程的三重境界:见山还是山:朴素又正确的逻辑
在上述的隔夜退房的逻辑代码中,我们用了五个嵌套,其中有五个计算,但实际上只有3种不同的计算,在这样的模式下,我们值得思考,是不是代码过于冗余了。 现在我们把隔夜代码改为如下 CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/原创 2009-06-21 09:38:00 · 1074 阅读 · 0 评论 -
结构化编程的三重境界:见山是山:朴素的直观逻辑编程
《五灯会元》卷十七中,有一则青原惟信禅师的语录:“老僧三十年前未参禅时,见山是山,见水是水。及至后来亲见知识,有个入处,见山不是山,见水不是水。而今得个休歇处,依前见山只是山,见水只是水。”这描述了我们对世界的一个观察和思考的过程,只要我们对事物进行执着的观察和思考,那在认识事物的过程中总是会经过以上的三个不同的过程和境界。我们在本节,将通过一个案例描述作为程序员应如何对待结构化编程的思原创 2009-06-21 09:38:00 · 1143 阅读 · 0 评论 -
数据类型转换:1人民币+1美元=?
数据类型转换是我们从小学就开始学习的内容,只不过在小学我们称为单位换算。比如一条狗加一匹马等于是多少呢?总不是两条狗或两匹马吧。我们需要把单位转为都可以计算的单位,比如动物。结果就是两只动物。这样的转换,我们称为数据类型转换。在C#中数据类型转换又分为隐式转换和显式转换。隐式转换是默认的转换,而显式转换就是必须明确说明的转换。比如¥1+$1的问题,在国际贸易结算中,默认将人民币转换为原创 2009-06-21 09:38:00 · 995 阅读 · 0 评论 -
值类型和引用类型和数据大小排名
在2.2.1我们对C#的基本数据类型有了基本了解。C#将数据类型分为:值类型、引用类型和指针类型。通用类型系统支持两种一般类别的类型,每一类都细分成子类别: q 值类型:值类型直接包含它们的数据,值类型的实例要么在堆栈上,要么内联在结构中。值类型可以是内联的(由运行库实现)、用户定义的或枚举的。有关内联值类型的列表,请参见 .NET Framework 类库。q原创 2009-06-21 09:38:00 · 948 阅读 · 0 评论 -
异常:Exception
我们开发了函数,当函数的调用者在使用函数的时候,我们希望函数的调用者可以正确的使用函数,比如给予函数正确的参数值。但在实际的过程中,函数的调用者可能由于各种原因给予了错误的值。在这种情况下,我们需要向调用者抛出错误信息,并中断程序的执行,这个过程我们称为异常。程序必须能够统一处理在执行期间发生的错误。公共语言运行库提供了一个模型,以统一的方式通知程序发生的错误,从而为设计容错软件提供了极原创 2009-06-21 09:38:00 · 2289 阅读 · 0 评论 -
结构化编程:多支条件判断switch case
有些条件判断并非简单的真假模式,而是在多种可能中选择一个处理。这种情况,我们需要使用switch case语句进行处理。以下是对上海地铁自动售票机的模拟 CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->static void原创 2009-06-21 08:38:00 · 3910 阅读 · 0 评论 -
结构化编程:单支条件选择控制
在C#中,用于处理条件选择的语句有if, else, switch, case四个关键字。if, else用于处理单支的逻辑判断。以下代码演示根据age(年龄)的值输出信息: CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--原创 2009-06-21 08:38:00 · 669 阅读 · 0 评论 -
结构化编程:变量,常量和赋值
结构化程序设计(structured programming)是以模块功能和处理过程设计为主的详细设计。其概念最早由E.W.Dijikstra在1965年提出的,是软件发展的一个重要的里程碑。它的主要观点是采用自顶向下、逐步求精的程序设计方法,使用三种基本控制结构(顺序、选择、重复)构造程序。任何程序都可由这三种基本控制结构构造 。程序从主程序(Main)入口开始,逐行顺序执行,当遇到选原创 2009-06-21 08:38:00 · 1587 阅读 · 0 评论 -
理解标准输出流方法:WriteLine和Write
控制台项目,Visual Studio 2008默认的为我们建立了Program.cs文件,并且在该文件中创建了一个Program的类(class),你应该看到大致如下的代码界面 CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-原创 2009-06-21 08:38:00 · 3435 阅读 · 0 评论 -
自定义验证一种用法:CustomValidator+ICallbackEventHandler
ASP.NET中的CustomValidator可以提供我们发挥无穷的想象力,不过有时候还是有点麻烦,在客户端写复杂的脚本嘛,实在是太麻烦。在服务端写验证嘛,又感觉要做一次提交,总是好像不纯粹。当然,我们可以用updatepanel来模拟类似ajax的效果,我今天实在是吃饱了没事干了,提供另一种方案来实现无刷新提交+客户端验证+服务端逻辑验证。所要实现的业务逻辑依然非常简单,检查用户名是否存在。aspx的html body的部分很简单,全部是web服务器控件用户名字原创 2010-06-30 19:28:00 · 1808 阅读 · 0 评论 -
对ASP.NET网站高性能和多并发的设计的讨论
对以下文章内容我要说明下,在财大气粗的互联网公司或为财大气粗的客户服务的不缺钱的主,请立即绕行,以下内容不适合您。以下内容为客户计算资源紧缺,预算紧缺,无法通过增大带宽,增多服务器,购买各种高级服务的程序员们进行讨论。谢谢对于如何提高应用程序的性能(无论是互联网应用还是企业级应用)我的观点一直是考虑一个核心:IO处理。因为我认为目前的CPU的处理能力已经是非常高了,正常编写的在内存中处理的代码没有原创 2012-02-21 06:09:41 · 16696 阅读 · 11 评论 -
Enum:枚举
枚举 (enum) 是值类型的一种特殊形式,它从 System.Enum 继承而来,并为基础的基元类型的值提供替代名称。枚举类型有名称、基础类型和一组字段。基础类型必须是一个内置的有符号(或无符号)整数类型(如 Byte、Int32 或 UInt64)。字段是静态文本字段,其中的每一个字段都表示常数。同一个值可以分配给多个字段,出现这种情况时,必须将其中某个值标记为主要枚举值,以便进行反射和原创 2009-07-30 21:38:00 · 5017 阅读 · 0 评论 -
Math:处理数学计算的工具
在软件开发过程中,我们有时候需要进行些数学计算,除了简单的四则运算外,我们也许会涉及到三角函数、对数等数学应用。.Net提供了System.Math类辅助我们完成工作。 以下代码演示了Math的基本能力: System.Console.WriteLine(System.Math.Abs(-12.01));//绝对值 System.Console.WriteLine(System.Mat原创 2009-07-30 21:38:00 · 1057 阅读 · 0 评论 -
ArrayList:可变数组
数组用于定义长度不变的集合,但是在实际的处理过程中,我们往往对集合的大小并不确定,因此在实际的开发工作中,我们更多的需要处理集合元素。ArrayList是一个可变数组,其变在于两点: 集合的大小可变 集合中存放的数据类型可变 我们看以下的代码案例: System.Collections.ArrayList list = new System.Collections.ArrayList原创 2009-07-30 21:38:00 · 2307 阅读 · 0 评论 -
结构化编程的三重境界:见山不是山:正确但冗余的逻辑
因此我们了解到,我们需要更加精确的判断时间的界限。因此我们重新将代码改为如下: CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->static void Main(string[] args){ DateTime ind原创 2009-06-21 09:38:00 · 1372 阅读 · 0 评论 -
结构化编程:跳转控制break、continue
在循环或条件判断执行中,我们有时候需要中断当前的执行控制,C#提供了两个关键字break、continue。continue是用在循环语句中,将控制权传递给它所在的封闭迭代语句的下一次迭代。break 语句用于终止最近的封闭循环或它所在的 switch或if 语句。控制传递给终止语句后面的语句(如果有的话)。 CodeCode highlighting produced原创 2009-06-21 08:38:00 · 1367 阅读 · 0 评论 -
什么是编程?什么是软件开发?
在学校里,为了实现课堂练习,为了完成作业,为了实现而实现的代码过程,我将其定义为编程,这个时候,你只要正确的让编译器把你的代码顺利的编译通过,输出你希望的或者说你的导师希望的结果即可,你不需要考虑弹性、扩展性和维护性,也不需要考虑你的代码是否强壮,也不需要考虑是否具有价值,因为你只是在编程。而软件开发,是使用代码编写出具有商业质量的软件,在这个过程中,你需要仔细的考察你的每行代码原创 2009-06-21 08:38:00 · 2418 阅读 · 0 评论 -
中文:一个面向对象的自然语言
一直很奇怪的一点,字母国家的人是怎么想出面向对象这个概念的,中文却是自然语言中非常具有面向对象特征的语言。 我们看看如下的表格对应 中文 英文 公鸡 Cock 母鸡 Hen 小鸡 Chick 病床 Sickbed 婴儿床 Infanette 行军床 Tent Bed 中文中对相同事物的不同形容描述在组词搭配中很容易得到归纳,而对照的英文,却无原创 2009-08-04 22:37:00 · 1810 阅读 · 1 评论 -
意大利面条:面向过程的代码模型
面向过程的代码往往被人形容为意大利面条。先让我们看看以下面向过程思路的代码编写。 string s = "12.14"; bool format = true; int precision = 2; char symbol = $; if (s.LastIndexOf(symbol) > 0) { //货币符号非法 format = false; } else { if (s.LastI原创 2009-08-01 17:37:00 · 3591 阅读 · 0 评论 -
Array:一组数据的有序集合
数组是一种数据结构,它包含若干相同类型的变量。数组的定义是:在内存中连续开辟的空间,该空间中存储着一组相同数据类型的值。 数组具有以下属性: 数组可以是一维、多维或交错的。 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。 交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null。 数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1。原创 2009-07-30 20:38:00 · 1488 阅读 · 0 评论 -
模块化编程:函数定义
在软件开发的过程中,我们经常会重复的使用一些代码片段,因此我们往往将这样的代码片段作为函数进行调用。函数有4种模式的定义和使用q 有参数,有返回值:y=f(x)q 有参数,无返回值:f(x)q 无参数,有返回值:y=f()q 无参数,无返回值:f()在游戏、图形、建筑领域的软件应用中,我们经常需要计算几何图形的面原创 2009-06-21 08:38:00 · 1484 阅读 · 0 评论 -
结构化编程:确定迭代循环控制for
很多时候的重复执行,是我们知道需要执行多少次。比如那道高斯经典的从1加到100的题目,用代码模拟高斯的同学的计算模型为如下 CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->static void Main(string[] arg原创 2009-06-21 08:38:00 · 826 阅读 · 0 评论 -
结构化编程:不确定迭代循环控制do while
很多时候,我们需要重复的执行一些代码,这样我们就需要迭代循环控制。以下案例描述了如何控制重复的执行。假设,你购买房子的首付需要30万人民币,你入职工作的第一年,每月工资是3500,以后每年薪水增长20%。你是一个很有计划的人,无论薪水多少,你都将收入的一半存起来。那么,你需要多少年可以存到你需要的首付呢? CodeCode highlighting produced by Act原创 2009-06-21 08:38:00 · 946 阅读 · 0 评论 -
层层清晰:面向对象的代码模型
好了,在经历了面向过程的代码之后,我们来观察以下使用面向对象思路的代码: string s = "12.14"; bool format = true; int precision = 2; char symbol = $; if (s.LastIndexOf(symbol) > 0) { //货币负号非法 format = false; } s = s.Replace(symbol,原创 2009-08-01 17:37:00 · 724 阅读 · 0 评论 -
Stack和Queue:后进先出和先进先出
Queue是先进先出的集合而Stack是后进先出的集合。这两个集合在日常的工作中也经常会用到。Queue相当我们去银行柜台排队,大家依次鱼贯而行。Stack象我们家中洗碗,最后洗好的碗叠在最上面,而下次拿的时候是最先拿到最后叠上去的碗。了解了这样场景,就很容易明白Stack和Queue可用在哪里了。 比如我们为医院作一个排队叫号的系统,那肯定是选择Queue对象处理。如果我们要为出牌或下棋准原创 2009-07-30 21:37:00 · 25761 阅读 · 0 评论 -
StringBuilder:字符串构建
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。 StringBuilder可以在实例化原创 2009-07-30 21:38:00 · 1912 阅读 · 0 评论 -
String:本质上是字符数组
String用来表示文本,即一系列 Unicode 字符。字符串是我们开发过程中频繁使用的对象,我们在软件界面上提示用户的所有一切都是字符串:不管是发票的日期还是发票的编号,或者是发票的金额虽然在定义数据类型时候分别应该是DateTime、double或string,但当界面呈现的时候,都是以文本的形式呈现,也就是string格式。 字符串的声明非常的简单,使用””(双引号)描述内容。原创 2009-07-30 21:38:00 · 6580 阅读 · 1 评论 -
类是数据类型,对象是内存的具体分配
对于初学面向对象的人来说,往往很疑惑什么是对象,什么是类。在面向对象的编程领域中,我们需要明确一个事实:所有的类型必须被明确的表示,而不是被其他数据类型来替代。 类是 C# 中功能最为强大的数据类型,它定义了数据类型的数据和行为。然后,程序员可以创建作为此类的实例的对象。类支持继承,而继承是面向对象编程的基础部分。 比如我们在前面了解的一个关于洗牌的过程,在前面的代码中,我们计算和产生的原创 2009-08-04 22:37:00 · 1504 阅读 · 1 评论