随笔分类 -  .NET

摘要:一 前言 很少接触HashTable晚上回来简单看了看,然后做一些增加和移除的操作,就想和List 与Dictionary比较下存数据与取数据的差距,然后便有了如下的一此测试,当然我测的方法可能不是很科学,但至少是我现在觉得比较靠谱的方法。如果朋友们有什么好的方法,欢迎提出大家来交流下。先来简单介... 阅读全文
posted @ 2015-10-29 19:36 Binyao 阅读(313) 评论(0) 推荐(0) 编辑
摘要:一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质。属性:class TimePeriod{ private double seconds; public double Hours { get { return seconds / 3600; } ... 阅读全文
posted @ 2015-10-21 21:16 Binyao 阅读(247) 评论(0) 推荐(0) 编辑
摘要:现在很多程序员在面试的时候都遇到过这个问题---,实现一个连动效果,我也遇到过,感觉这道面试题目挺经典的,挺考验面向对象设计(OOD)的能力,虽然是个很简单的例子,但要考虑到程序的扩展性。比如说有新的需求,要求后面再加上狗叫了,那些写的过死且繁琐的代码就要来次大地震了;再比如说又变需求了,猫叫了是因... 阅读全文
posted @ 2015-10-21 16:14 Binyao 阅读(1533) 评论(0) 推荐(0) 编辑
摘要:1.面向接口编程和面向对象编程是什么关系首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。2.接口的本质接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯... 阅读全文
posted @ 2015-10-19 11:10 Binyao 阅读(25497) 评论(6) 推荐(24) 编辑
摘要:情况1:class A{public void Show()}class B:A{public void Show()} 编译通过,有警告让在B的方法里添加new关键字,以便将A的方法隐藏编译时绑定(根据声明类型调用方法)情况2:class A{public virtual void Show()... 阅读全文
posted @ 2015-10-13 20:14 Binyao 阅读(1746) 评论(0) 推荐(0) 编辑
摘要:任何一个使用.NET的人描述线程与进程的区别?什么是Windows服务,它的生命周期与标准的EXE程序有什么不同Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?EXE和DLL之间的区别是什么?什么是强类型,什么是弱类型?哪种更好些?为什么... 阅读全文
posted @ 2015-09-25 15:19 Binyao 阅读(303) 评论(0) 推荐(0) 编辑
摘要:1.创建 windows服务 项目 文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服务"2.系统已经为我们建立了一个 Service1.cs 组件,测试时我们就用它了. 如果要新件的话,右键项目 -> 添加 -> 新建项 -> windows 服务。3.在 Service1.cs 上 ,按 F7 (右键查看代码),打开代码页。加入我们测试用的代码。 注意:下面的几个方法中的 str 变量,为了我们一会儿调试时设置断点用的!using System; usi 阅读全文
posted @ 2013-11-22 15:01 Binyao 阅读(2321) 评论(0) 推荐(0) 编辑
摘要:abstract 修饰类名为抽象类,修饰方法为抽象方法。如果一个类为抽象类,则这个类智能是其他某个类的基类。抽象方法在抽象类中没有函数体。抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽象方法。 抽象类有如下特征:抽象类不能实例化抽象类的派生类必须实现所有抽象方法 抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽象方法抽象方法:抽象方法是隐式的虚方法只允许在抽象类中使用抽象方法声明抽象方法在抽象类中没有方法体在抽象方法声明中,不能使用static或者virtual修饰符abstract class A //abstract 关键字在class前面 { pub.. 阅读全文
posted @ 2013-06-24 16:35 Binyao 阅读(364) 评论(0) 推荐(0) 编辑
摘要:值类型转换为引用类型 是装箱引用类型转换为值类型 是拆箱这个实际上就是指数据存储在堆还是栈上 阅读全文
posted @ 2013-06-24 10:29 Binyao 阅读(179) 评论(0) 推荐(0) 编辑
摘要:ExecuteReader:可以读一个表的记录,只能读不能写ExecuteNonQuery:可以写也可以读ExecuteScalar:只能读一条记录,一般用来判断数据库是否有数据等,只能读不能写ExecuteNonQuery():这个可以让我们在更新数据库时不使用 DataSet 而使用 ExecuteNonQuery 更改数据库中的数据。通过执行 UPDATE、INSERT 或 DELETE SQL语句就 可以达到更改数据库中的数据目的。即使 ExecuteNonQuery 不返回任何行,映射到参数的输 出参数或返回值仍然使用数据填充。但对于 UPDATE、INSERT 和 DELETE S 阅读全文
posted @ 2013-05-20 17:20 Binyao 阅读(2191) 评论(0) 推荐(0) 编辑
摘要:C# 从1.x 发展到目前的 4.5,委托的写法真是越来越简单精悍。如果您对这些委托的写法不是很清晰,本文可以帮助到您。委托是一种安全封装方法的类型,可以将方法作为方法的参数。委派方法的参数个数、顺序、类型及方法返回值类型必须跟定义的委托方法一样,但参数名称可以不同。1、C# 定义一个完整委托:delegate string SayMessage(string msg);static string SayHello(string Name){ return string.Format("Hello {0}", Name);}static void Main(string[] 阅读全文
posted @ 2013-05-14 10:24 Binyao 阅读(218) 评论(0) 推荐(0) 编辑
摘要:C#中类及类型成员修饰符有以下四类:public,private,protected,internal,protected internal。public 类及类型成员的修饰符private 类型成员的修饰符protected 类型成员的修饰符internal 类及类型成员的修饰符由以上四类说明,我们知道,可以放在class前面修饰类的修饰符关键字只有public和internal,如果没写任何关键字,默认是internal. 1.public class:任何地方该类都可以被访问到。 2.internal class:只有在同一程序集内,该类才可以被访问到。而类型成员的修饰符可以是由... 阅读全文
posted @ 2013-05-09 10:04 Binyao 阅读(231) 评论(0) 推荐(0) 编辑
摘要:使用非泛型集合类的限制可以通过编写一小段程序来演示,该程序利用 .NET Framework 基类库中的 ArrayList 集合类。ArrayList 是一个使用起来非常方便的集合类,无需进行修改即可用来存储任何引用或值类型。View Code // The .NET Framework 1.1 way to create a list:System.Collections.ArrayList list1 = new System.Collections.ArrayList();list1.Add(3);list1.Add(105);System.Collections.ArrayList 阅读全文
posted @ 2013-05-06 16:10 Binyao 阅读(1208) 评论(0) 推荐(1) 编辑
摘要:一种提供参数数目可变的参数传递方法。任意数目的参数可转化为一个数组。 params 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力它在只能出现一次并且不能在其后再有参数定义,之前可以View Code class App { //第一个参数必须是整型,但后面的参数个数是可变的。 //而且由于定的是object数组,所有的数据类型都可以做为参数传入 public static void UseParams(int id, params object[] list) { Console.Writ... 阅读全文
posted @ 2013-05-04 16:22 Binyao 阅读(318) 评论(0) 推荐(0) 编辑
摘要:隐式转换由系统来做的,显示转换由程序员自己来做的char c;int a = c; //隐式转换 okint b = (int )c; //显示转换 okchar d = a; //隐式转换 errorchar e = (char)a;//显示转换 ok 关于隐式转换和显示转换,每种语言都有的,一般常用到的场合,一种是写运算表达式的时候,要保持整体的数据类型一致和计算准确,比如有一个变量a是int型,但是它是通过加减乘除得到的,那么在运算中就要考虑用显示转换,除的运算需要转换成float或double,再把结果强制转换为int;再一个就是传参数的时候,需要注意哪些需要显示转换,或者对集合赋值的 阅读全文
posted @ 2013-05-04 16:18 Binyao 阅读(1667) 评论(0) 推荐(0) 编辑
摘要:1. Foreach2. ArrayList.Adapter.3. ArrayList to Array. 强制转换Array result = (int[])arrayList.ToArray(typeof(int))View Code class Program { static void Main(string[] args) { int[] arrayInt = new int[] { 1, 2, 3, 4 }; ArrayList arrlistInt = new ArrayList(); ... 阅读全文
posted @ 2013-05-04 15:45 Binyao 阅读(208) 评论(0) 推荐(0) 编辑
摘要:垃圾回收分两步:1:标记;2:压缩1:标记。在垃圾回收开始的时候,垃圾回收器视托管堆中的所有对象都为垃圾,即线程栈上没有指针指向托管堆。这样的估计是因为一个对象被视为垃圾就是它没有被引用,当垃圾回收开始的时候,垃圾回收器会沿着线程栈线性扫描,当线程栈上的一个变量引用了托管堆中的对象时,垃圾回收器就会将这个对象标记,即修改该对象同步块索引中的一个特定的位,同步块索引就是一个bit数组,每一个元素都有它特定的作用,上面就列出了我所知道的三个功能。被标记的对象也可能引用其他的对象,而被引用的对象同样会被标记,垃圾回收器是用递归的方式将这些对象一一标记的,一个对象可能会被多个对象引用,当垃圾回收器发现 阅读全文
posted @ 2013-05-03 10:58 Binyao 阅读(286) 评论(0) 推荐(0) 编辑
摘要:.NET 平台在内存管理方面提供了 GC(Garbage Collection),负责自动释放托管资源和内存回收的工作。但在以下两种情况需要我们手工进行资源释放:一、由于它无法对非托管资源进行释放,所以我们必须自己提供方法来释放对象内分配的非托管资源,比如你在对象的实现代码中使用了一个 COM 对象;二、你的类在运行是会产生大量实例,必须自己手工释放这些资源以提高程序的运行效率。最理想的办法是通过实现一个接口显式的提供给客户调用端手工释放对象,System 命名空间内有一个 IDisposable 接口,拿来做这事非常合适。View Code View Code using System;na 阅读全文
posted @ 2013-05-02 10:19 Binyao 阅读(171) 评论(0) 推荐(0) 编辑
摘要:一般来说我们都是用 Hashtable 的 ContainsKey 方法来查找 Hashtable 中是否存在某个键值然后读取他,但是这个方法并不是效率最好的方法。比较好的方法是直接读取键值然后判断这个对象是否为 null 然后读取。两种代码分别如下:1.一般慢速的方法:if (objHash.ContainsKey(keyValue)){ strValue=(String)objHash[keyValue]; } 2.而快速的方法是:Object objValue=objHash[keyValue];if (objValue!=null){ strValue=(String)objVal.. 阅读全文
posted @ 2013-04-30 13:23 Binyao 阅读(480) 评论(0) 推荐(0) 编辑
摘要:假设这样的一个场景,有两个List<string>,分别是listA和listB,其中均有超过1w+的数据量,现在要求找出在B中但是不在A中的数据集合,于是我们写了以下代码View Code listB.ForEach(re => { if (!listA.Contains(re)) { //....... } });这样写的话,是能够达到我们的需求的,但是很不幸,时间也会消耗很多。我们看下List.Contai... 阅读全文
posted @ 2013-04-29 23:39 Binyao 阅读(2398) 评论(0) 推荐(0) 编辑