随笔分类 -  C#专题

摘要:这一章的内容,有些之前已经在微信公众号中将详细的思路及步骤汇总过,有些之后可能会再找时间对其进行分析,这里只将最终实现罗列出来,难易程度不分先后,算法复杂度不保证是最优,留给大家空间自行思考,当然,本章用的是C#语言进行编码,大家可以使用自己熟悉的语言将这些算法实现一遍哦~ 如果你有什么有趣的算法题 阅读全文
posted @ 2016-11-28 13:55 Ribbon 阅读(1442) 评论(2) 推荐(0) 编辑
摘要:FxCop是利用规则库来分析托管代码的工具。可以创建任意目的规则——命名约定、安全性、特性使用等。在Visual Studio Team System 2005中,FxCop经过改头换面,成为了托管代码分析(Managed Code Analysis)工具集成在IDE中,这使得分析工作可以通过应用程... 阅读全文
posted @ 2015-04-17 14:23 Ribbon 阅读(888) 评论(0) 推荐(0) 编辑
摘要:核心C#:值类型存储在堆栈中,而引用类型存储在托管堆上。object类型可以用于两个目的:可以使用object引用绑定任何子类型的对象object类型执行许多一般用途的基本方法,包括Equals(), GetHashCode(), GetType()和ToString().在C#中,switch语句... 阅读全文
posted @ 2015-03-24 14:22 Ribbon 阅读(400) 评论(2) 推荐(0) 编辑
摘要:本章内容:编译和运行面向 .NET的代码MSIL的优点值类型和引用类型数据类型化理解错误处理和特性程序集、.NET基类和命名空间本章主要介绍一些概念,内容不多。C#是专门为Microsoft的.NET Framework设计的一门语言,是一种面向对象方法的语言。C#就其本身而言,只是一门语言,尽管它... 阅读全文
posted @ 2015-03-09 10:33 Ribbon 阅读(1224) 评论(0) 推荐(0) 编辑
摘要:函数式设计的核心与函数的应用以及函数如何作为算法的基本模块有关。利用局部套用技术可以把所有函数看成是函数类的成员,这些函数只有一个形参,有了局部套用,才有部分应用。部分应用是使函数模块化成为可能的两个技术之一,另一个是组合。C#函数式程序设计之参数的解耦局部套用是一种转换技术,它把一个需要接收多个参数的函数转换为一系列函数,后者每次只接受一个参数并返回序列中的下一个函数。在这个函数链的末尾,所有的参数都可以使用,并允许原算法执行自己的操作。考虑下面这个简单的函数,它使用了与C#2.0兼容的匿名方法定义语法:Func add = delegate(int x, int y) { ... 阅读全文
posted @ 2014-04-03 15:01 Ribbon 阅读(1045) 评论(0) 推荐(1) 编辑
摘要:自3.5版本以来,.NET以及微软的.NET语言开始支持表达式树。它们为这些语言的某个特定子集提供了eval形式的求值功能。考虑下面这个简单的Lambda表达式: Func add = (x, y) => x + y;可以知道,上述代码最后生成一个局部函数。Lambda表达式是需要编译的代码。在C#编译器运行时,把匿名函数转换为IL代码。为了建立一个表达式树,需要对上述语法稍作修改:Expression> addExpr = (x, y) => x + y;唯一的差别是保存Lambda表达式的变量的类型。这个差别指示C#编译器生成完全不同的代码。编译器不是把表达式编译成IL代 阅读全文
posted @ 2014-03-29 16:40 Ribbon 阅读(413) 评论(0) 推荐(1) 编辑
摘要:此题为July在CSDN发布的微软编程面试100题中的第一题,觉得蛮有趣的,今天也拿过来玩玩,July的代码用的是C++实现,可能因为有指针的原因吧,感觉看起来相对比较容易理解整个的实现过程,而我,试着用C#完成这样的功能。完整的题目如下:把二元查找树转变成排序的双向链表,要求不能创建任何新的结点,只调整指针的指向。 10 / \6 14/ \ / \4 8 12 16转换成双链表 4=6=8=10=12=14=16动手编码之前,先回顾下二叉查找树的特点:任意节点的左子树都要小于当前节点,右子树都要大于当前节点。查询某个值,需要的时间复杂度为O(lgN)。现在要求将其由树状结构改造... 阅读全文
posted @ 2014-03-27 12:59 Ribbon 阅读(971) 评论(1) 推荐(1) 编辑
摘要:如果一个程序设计语言能够用高阶函数解决问题,则意味着数据作用域问题已十分突出。当函数可以当成参数和返回值在函数之间进行传递时,编译器利用闭包扩展变量的作用域,以保证随时能得到所需要的数据。C#函数式程序设计之作用域在C#中,变量的作用域是严格确定的。其本质是所有代码生存在类的方法中、所有变量只生存于声明它们的模块中或者之后的代码中。变量的值是可变的,一个变量越是公开,带来的问题就越严重。一般的原则是,变量的值最好保持不变,或者在最小的作用域内保存其值。一个纯函数最好只使用在自己的模块中定义的变量值,不访问其作用域之外的任何变量。遗憾的是,有时我们无法把变量的值限制于函数的范围内。如果在程序的初 阅读全文
posted @ 2014-03-19 15:02 Ribbon 阅读(1200) 评论(2) 推荐(0) 编辑
摘要:有效地处理数据时当今程序设计语言和框架的一个任务。.NET拥有一个精心构建的集合类系统,它利用迭代器的功能实现对数据的顺序访问。惰性枚举是一个迭代方法,其核心思想是只在需要的时候才去读取数据。这个思想保证了任何迭代算法都十分有效,同时又可以灵活地根据需要读取任意多的数据,而且不会造成过多的开销。C#函数式程序设计之枚举元素.NET集合类型的基础是一个名为IEnumberable的接口,以下就是这个接口的声明:public interface IEnumerable{ IEnumerator GetEnumerator();}实际上IEnumberable接口只允许程序员做一件事:查询类的... 阅读全文
posted @ 2014-03-17 15:11 Ribbon 阅读(1458) 评论(1) 推荐(0) 编辑
摘要:C#函数式程序设计之约束类型每当使用泛型类型时,可以通过where字句对泛型添加约束:static void OutputValue(T value) where T : ListItem{ Console.WriteLine("String list value: {0}", value.Value);}这个例子直观地声明了一个约束:类型T必须与ListItem相匹配。泛型类型约束T:X表示T可以是X、X的派生对象或X的实现(假如X是一个接口)。换言之,假如类型T的一个实例为t,则可以把它赋给一个变量:X x=t;约束可以使用具体的类型,但是在这些情形下,类型不可以是密封 阅读全文
posted @ 2014-03-17 11:56 Ribbon 阅读(1584) 评论(3) 推荐(3) 编辑
摘要:在面向对象语言中,我们可以编写一个元素为某个专用类型(可能需要为此创建一个ListElement)的List类,或者使用一个非常通用、允许添加任何类型元素的基类(在.NET中,首先想到的是System.Object)。这两种方法都有缺点。使用通用类型的基类时,很可能会把不相容的元素添加到列表中;如果使用元素为专用类型的列表,只是推迟此问题的发生,因为实际类型是在最后封装到这个类中。泛型提供了这个问题的解决方法。一般而言,一个泛型类型G可以应用于一个或多个其他类型——如O1、O2等——其思想是,G的实现不需要对Ox等类型知道很多。C#函数式程序设计之泛型函数任何方法在为方法签名添加一个或多个类型 阅读全文
posted @ 2014-03-16 11:52 Ribbon 阅读(1612) 评论(2) 推荐(3) 编辑
摘要:相信很多人都听说过函数式编程,提到函数式程序设计,脑海里涌现出来更多的是Lisp、Haskell等语言,而C#,似乎我们并不把它当成函数式语言,其实,函数式程序设计并不是只针对某个特定的程序设计语言,而C#,也正一步步使用函数式丰富自己的语言结构,帮助人们更好的实现期望的结果。函数式程序设计函数式程序设计把重点放在函数的应用上,函数式程序设计人员以函数为基本模块来建立新函数,这并不是说没有其他语言的成分,而是说函数是程序体系创建的主要构造。引用透明(Referential transparency)是函数式程序设计领域中的一个重要思想。一个引用透明的函数的返回值只取决于传递给它的参数的值。这正 阅读全文
posted @ 2014-03-15 22:13 Ribbon 阅读(2110) 评论(2) 推荐(1) 编辑
摘要:作为线性表的两种物理结构之一,顺序存储指的是用一段地址连续的存储单元依次存储线性表的数据元素,于是,基本思想便是由数组来承担盛放这些元素的重任。对于线性表的操作,比较常见的则是获取线性表的长度GetLength(),向线性表指定位置插入一个元素Insert(),向线性表追加一个元素Add(),判断线性表是否为空IsEmpty(),获取指定位置的元素GetElement(),删除指定位置的元素Delete(),在线性表中查找与给定值相等的元素并提示该元素所在的位置或者查找失败LocateElement()及反转线性表Reverse(),如下代码定义的方法便是我们需要花时间思考如何实现的:int 阅读全文
posted @ 2013-03-04 17:53 Ribbon 阅读(2124) 评论(3) 推荐(1) 编辑