随笔分类 - C#

摘要: 在C#中比较源字符串是否包含目标字符串,我们可以使用以下方法:Contains或者IndexOf,相对而言 `Contains` 方法更符合直觉,因为它直接返回了一个布尔值,但当我们的对于需要忽略大小写时只能使用 `IndexOf` 支持 `StringComparison` 参数的重载方法,但是这个方法可能不够符合语义,虽然这种情况下很多人或许会将源字符串和目标字符串都转换为大写或小写再对比,但这样未免太低效 ... 阅读全文
posted @ 2017-03-15 11:56 gyzhao 阅读(11489) 评论(0) 推荐(2) 编辑
摘要:有时候我们会有这样的需求,我们只需要序列化实体类中的一部分属性,这时候我们可以通过声明忽略掉一些我们不需要序列化的属性,有两种方式可以使用么达到这个目标... 阅读全文
posted @ 2015-05-02 21:01 gyzhao 阅读(7650) 评论(8) 推荐(9) 编辑
摘要:可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用。如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量。协变和逆变是两个相互对立的概念... 阅读全文
posted @ 2015-05-01 20:59 gyzhao 阅读(14444) 评论(6) 推荐(25) 编辑
摘要:特性(Attribute)是将额外数据关联到一个属性(以及其他构造)的一种方式,枚举是在编程中最常用的一种构造了,枚举本质上其实是一些常量值,但相对于直接使用数值,枚举为我们提供了更好的可读性。我们知道枚举的基础类型只能是值类型(byte、sbyte、short、ushort、int... 阅读全文
posted @ 2013-05-26 17:31 gyzhao 阅读(1713) 评论(1) 推荐(0) 编辑
摘要:学习C#的时候就知道使用反射可以对我们编程提供极大的便利(动态的调用类型成员、创建实例等),但是在实际的工作中直接使用反射的机会比较少,有印象的就是一次自己做的WinForms小工具的时候利用反射来动态获取窗体上的每个控件,并且为必要的控件动态添加注册事件... 阅读全文
posted @ 2013-05-25 00:55 gyzhao 阅读(1345) 评论(1) 推荐(2) 编辑
摘要:昨天面试遇到这样的一道题目:1,1,2,3,5,8,13,21...,请问第30位的值是...... 阅读全文
posted @ 2013-04-26 10:56 gyzhao 阅读(792) 评论(1) 推荐(0) 编辑
摘要:下面是C#继承的思维导图,全屏观看点击这里:C# 继承... 阅读全文
posted @ 2013-04-09 08:58 gyzhao 阅读(872) 评论(2) 推荐(0) 编辑
摘要:类时面向对象编程最基本的构造就是类或者本身,我们可以将类想象一个模板,它定义了一个零件的样子。对象就是用这些模具创建的零件。从结构化的、基于控制流的程序转向面向对象的程序,思维模式发生了根本性变化,因为面向对象编程提供了一个额外的组织层次... 阅读全文
posted @ 2013-04-08 16:41 gyzhao 阅读(2565) 评论(4) 推荐(1) 编辑
摘要:下面是C#方法和参数的思维导图,全屏观看点击这里:C# 方法和参数... 阅读全文
posted @ 2013-04-08 11:33 gyzhao 阅读(777) 评论(3) 推荐(0) 编辑
摘要:在C#语言中类型都是在基础类型(Primitive type)之上构建而成的,基础类型被视为其他所有类型的基础。C#语言的基本类型包括:8种整数类型、2种用于科学计算的二进制浮点型、1种用于金融计算的十进制浮点类型、1种布尔类型以及1种字符类型,以及object类型和字符串类型...... 阅读全文
posted @ 2013-04-07 09:31 gyzhao 阅读(2144) 评论(0) 推荐(7) 编辑
摘要:下面是C#运算符和控制流的思维导图,全屏观看点击这里:C# 运算符和控制... 阅读全文
posted @ 2013-04-03 15:32 gyzhao 阅读(965) 评论(5) 推荐(3) 编辑
摘要:C#作为一门托管语言,和C/C++这些本地语言不同;C/C++经过编译后直接变成处理器可执行的机器码,而C#编译器则会将C#转换为CIL(简称IL)代码,而不是机器码,我们知道C#是基于.NET Framework 框架的语言,CIL代码转换为可执行的代码... 阅读全文
posted @ 2013-04-03 09:31 gyzhao 阅读(2310) 评论(11) 推荐(6) 编辑
摘要:在使用Web服务、.NET远程调用或给予Azure的程序时,最耗时的就是与远程服务器之间传输过程。如果只是简单的将本地API封装一下,就变成远程使用的API,这样做功能上不会有问题,但是效率低下。API的粒度越细所花费在等待数据返回的额外事件也就越... 阅读全文
posted @ 2013-03-31 20:05 gyzhao 阅读(451) 评论(2) 推荐(0) 编辑
摘要:持久化(persistence)是类型的一个重要特性。只要我们的类型不是UI控件、窗体或者表单,都应该尽可能的为类型添加序列化支持。因为如果我们不为类添加序列化支持,而让类型的使用者来做这份工作几乎是不可能的。在.NET中支持序列化是一件非常简单的任务,在绝大多数的情况下... 阅读全文
posted @ 2013-02-28 21:22 gyzhao 阅读(482) 评论(0) 推荐(1) 编辑
摘要:如果将引用类型通过公有借口暴露给外界,那么对象的使用者即可绕过我们定义的方法和属性来更改对象的内部结构。这违反了我们通常的直觉,也会导致常见的错误。考虑到这一点,你应该修改类暴露出的接口。如果只是简单的返回内部数据,那么实际上就给外界赋予了访问内部... 阅读全文
posted @ 2013-01-19 21:07 gyzhao 阅读(773) 评论(0) 推荐(0) 编辑
摘要:.NET中的事件其实就是一个观察者模式(Observer Pattern)的一个语法上的快捷实现(更多可以参考:使用委托和事件实现观察者模式)。事件是一种内建的委托,用来为事件处... 阅读全文
posted @ 2013-01-18 23:59 gyzhao 阅读(738) 评论(0) 推荐(0) 编辑
摘要:在C#语言中,回调是通过委托来实现的。委托为我们提供了安全的回调定义,大多数委托都和事件相关,但这不是委托的全部应用场景,当类之间需要通信,并且我们希望一种比接口更加松耦合的机制时,委托便是最佳选择。委托允许我们在运行时配置目标并且通知多个客户对象... 阅读全文
posted @ 2013-01-17 23:18 gyzhao 阅读(744) 评论(2) 推荐(0) 编辑
摘要:实现和覆写虚方法的区别:接口中声明的成员默认不是虚方法。派生类不能覆写基类中实现的接口成员。接口可以被显式实现,这会使针对该类的公有成员隐藏起来。接口与虚... 阅读全文
posted @ 2013-01-16 21:25 gyzhao 阅读(673) 评论(0) 推荐(0) 编辑
摘要:接口是一种按照契约设计的方式,一个类型必须实行接口中定义的方法。抽象基类则为一组相关的类型提供了一个共有的抽象。要注意二者的使用场景和区别:基类描述了对象是什么;接口描述了对象将如何表现行为。使用抽象基类还是接口,代表了对日后可能发生的变化两种... 阅读全文
posted @ 2013-01-15 22:38 gyzhao 阅读(2687) 评论(9) 推荐(6) 编辑
摘要:在保证类型可以完成其工作的前提下,我们应该尽可能的给类型分配最小的访问级别。可见性越低那么以后升级更改时所需的变化也就越少——因为能访问你的功能的代码越少,以后可能出现的修改也就会越少。创建内部类是一种常被忽略的限制类型作用域的方法,在创建一个类时... 阅读全文
posted @ 2013-01-14 20:33 gyzhao 阅读(754) 评论(0) 推荐(0) 编辑