随笔分类 -  C#技术

摘要:namespace IEnumreable{ class Person { public string Name { get; set; } public string Sex { get; set; } public string Desption { get; set; } public int DID { get; set; } } class Department { public int ID { get; set; } public string Name { get; set; } } class Program { private static void Main... 阅读全文
posted @ 2013-04-07 08:42 八神吻你 阅读(721) 评论(1) 推荐(0) 编辑
摘要:建立txt:using System;class Hello{ static void Main(string[] args){ Console.WriteLine("Hello,World,{0},{1}",args[0],args[1]); Console.ReadKey(); }}在cmd中对这个编译,C:\WINDOWS\Microsoft.NET\Framework\v4.0.30128\csc.exe -out:E:\NET1\Hello.cs E:\NET1\Hello.exeenter就可以把之前的程序编译好,之后就可以对编译好的exe可执行程序,进行调用: 阅读全文
posted @ 2013-03-24 11:19 八神吻你 阅读(426) 评论(0) 推荐(0) 编辑
摘要:声明一个可变数量的参数:Static int Add(params int[] values){ int sum = 0; if(value != null) { for(int x = 0;x<values.Length;x++) sum += values[x]; } return sum;}上面这个方法除去params,是一个普通的方法,接受int数组,返回组中的所以项之和。我们可以这样调用:Add(new int[]{1,2,3});但是阅读性不是很高,我们希望能更简洁:Add(1,2,3);这时,由于params关键字,是可以编译通过和运行的。params只能应用于方法参数中的 阅读全文
posted @ 2012-10-19 15:04 八神吻你 阅读(447) 评论(0) 推荐(0) 编辑
摘要:设计一个方法的参数的时,可为部分或全部参数分配默认值。调用其方法时,可以重新指定分配了默认值的参数,也可以使用默认值。重新指定分配默认值的参数时,可以显式地为指定参数名称赋值,隐式指定的时候,是根据方法参数的顺序,靠c#编译器的推断。代码示例:void M(int x=9,string s="a",DateTime dt = default(DateTime)){...}Main(){ M();//使用默认值 M(8,"b")://隐式指定方法参数,没有指定的使用默认值 M(6,"v",DateTime.Now);//同上 M(6,d 阅读全文
posted @ 2012-10-19 14:32 八神吻你 阅读(1912) 评论(0) 推荐(0) 编辑
摘要:CLR还支持类型构造器,也称为静态构造器。c#类型构造器可应用引用类型和值类型,永远没有参数。主要作用是:设置类型中静态字段的初始化。类型构造器不一定要在类中定义,但是最多也只能有一个。例:class SomeType{ static SomeType(){}}jit编译器在编译一个方法时,会查看代码引用哪些类型。任何类型定义了类型构造器,jit编译器都会检查当前AppDomain是否已经执行了这个类型构造器,如果没有就执行,已经执行了就直接返回,不再次执行。在多线程的环境下,可能同一时间有多个执行相同的方法,CLR希望每一个AppDomain中一个类型构造器只执行一次,在调用类型构造器时,使 阅读全文
posted @ 2012-10-16 17:37 八神吻你 阅读(785) 评论(0) 推荐(0) 编辑
摘要:CLR总是允许创建值类型的实例。另外值类型不一定需要定义构造器,c#编译器不会为值类型生成默认的无参构造器。引用类型包含值类型字段,引用类型初始化后,值类型默认会被初始化为0、Null。CLR允许为值类型定义构造器,但是构造器的调用,就必须显式的写代码来调用它们。CLR不允许为值类型定义无参构造器。只能定义有参构造器,并且构造器中必须为值类型中的所有字段全部赋值,否则报错。c#中虽然没有无参构造器,但是可以使用这个语法初始化在内部的字段:StructType st = new StructType();//为内部字段初始化0或者null所以对定义有参构造器的参考写法:public Struct 阅读全文
posted @ 2012-10-16 16:14 八神吻你 阅读(329) 评论(0) 推荐(0) 编辑
摘要:引用类型构造器是将类型的实例初始化为良好状态的一种特殊方法。创建一个引用类型的实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(对象指针、同步块索引),最后调用类型中定义的实例构造器来设置对象的初始化状态。构造引用类型的对象时,在调用类型的实例构造器之前,为对象分配所有字段的内存总是被先归零或为null。实例构造器永远不能被继续。如果定义的类中没有显式构造器,c#编译器将定义一个默认构造器,在它的实现中,只是简单调用基类的无参构造器。所以:public class SomeType{}等价于public class SomeTyoe{ public SomeType():base 阅读全文
posted @ 2012-10-16 14:41 八神吻你 阅读(318) 评论(0) 推荐(0) 编辑
摘要:常量:是一个特殊的符号,有一个从不变化的值。它的值是在编译时确定的。编译器将常量保存到程序集的元数据中,所有只能是编译器认识的基元类型作为常量。常量被看成类的一部分,是看出静态成员。代码引用一个常量符号,会在定义常量的元数据中查找该符号,提取之,并嵌入代码,生成的IL中是值本身。在c#中使用的是const关键字。字段:已一种数据成员,可以容纳任何的数据类型,不仅仅想常量一样只能存储基元类型。CLR支持类型字段和实例字段类型字段:用于容纳字段数据的动态内存是在类型对象中分配的,而类对象是在类型加载到一个AppDomain中创建的。通常是在引用该类型的任何方法首次进行JIT编译的时候。实例字段:用 阅读全文
posted @ 2012-10-16 13:52 八神吻你 阅读(417) 评论(0) 推荐(0) 编辑
摘要:partial关键字可以用在类、接口和结构上面。他告诉C#编译器,源代码文件可能包含在多个文件中。主要原因:1、源代码控制。可以使多个程序员同时编辑代码2、在同一个对象中,将不同的逻辑单元分开编写3、代码拆分,web窗体等,在VS中自动创建两个源代码文件分部功能是c#编译器实现的,CLR对分布类是一无所知的 阅读全文
posted @ 2012-10-15 11:22 八神吻你 阅读(422) 评论(0) 推荐(0) 编辑
摘要:静态类内部只包含static成员。这种类的唯一作用就是将一组相关的成员组合在一起。在c#中用static关键字定义不可实例化的类,只能应用于类,不能用于结构。因为CLR总是允许值类型实例化。c#编译器对静态类进行了限制:1、静态类必须直接从Object类直接继承2、静态类不能实现接口,只有类的实例才能调用接口方法。3、静态类只能包含静态成员4、静态类不能作为字段、方法参数和局部变量使用,他们都是类的实例。 阅读全文
posted @ 2012-10-15 11:06 八神吻你 阅读(405) 评论(0) 推荐(0) 编辑
摘要:CLR支持两种类型:引用类型和值类型。引用类型总是从托管堆上分配的。c#中的New操作符返回对象的内存地址。引用对象的注意点:1、内存从托管堆中分配2、堆上分配对象,有一些额外的操作,影响一些性能的3、从托管堆中分配一个对象时,可能强制执行一次垃圾回收。CLR中的值类型是轻量级的。不需要提领一个指针,不需要垃圾回收,可以减少垃圾回收的次数。在CLR中一般称为“类”的都是引用类型,所有的值类型都称为结构或者枚举。所有的结构都是抽象类ValueType的直接派生类。ValueType是直接从Object派生的。所有的枚举都是从Enum抽象类中派生的,Enum又是从ValueType派生的。一个值类 阅读全文
posted @ 2012-10-11 17:46 八神吻你 阅读(402) 评论(0) 推荐(0) 编辑
摘要:命名空间:用于对相关的类型进行逻辑分组,使用命名空间方便定位一个类型。使用类的全权名:System.Text.StringBuilder sb = new System.Text.StringBuilder();上面的写法很繁琐,使用using语句引入命名空间:using System.Text;StringBuilder sb = new StringBuilder();对于编译器来说,命名空间就是为一个类型附加一些分隔符号,使名称更有唯一性。c#的using指令是可选的,完全可以用类型的完整名称代替,c# 的using指令时指示编译器为每一个类型附加不同的前缀,确定匹配的完整名称。CLR不 阅读全文
posted @ 2012-10-11 10:21 八神吻你 阅读(383) 评论(0) 推荐(0) 编辑
摘要:CLR最重要的特性之一就是类型安全性。在运行时,CLR总是知道一个对象是什么类型。调用GetType方法可以返回类型。CLR允许将一个对象转换为它的实际类型,或者它的基类型。在C#中,可将一个对象隐式转换为它的基类型,将对象转换成派生类型需要显示转换。例:object o = new Emplee();Emplee e = (Emplee)o;但是如果将一个对象转换成自己的派生类型是,会运行时报错:object o = new object();Emplee e = (Emplee)o;所以CLR是类型安全的。c#中is as的操作符用法在c#语言中,进行类型转换的另一个方式是使用is as操 阅读全文
posted @ 2012-10-10 18:49 八神吻你 阅读(402) 评论(0) 推荐(0) 编辑
摘要:CLR要求每一个类型都最终从object类型派生,如下:class Typer {} === class Typer :object {}上面是完全相等的。所有的类型最终从object派生,每一个类型都有一组最基本的方法:Equals:如果两个对象相等,返回TrueGetHashCode:返回对象值的一个哈希码ToString:默认返回类型的完整名称,int等类型被重写GetType:返回调用的那个对象的类型此外,从object派生类型能访问受保护的方法 MemberWiseClone:返回一个新实类Finalize:虚方法,在内存回收之前调用CLR要求所有的对象都用NEW操作符来创建:1、计 阅读全文
posted @ 2012-10-10 18:06 八神吻你 阅读(499) 评论(0) 推荐(0) 编辑
摘要:Activator.CreateInstance 方法 (Type)使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。 命名空间:System程序集:mscorlib(在 mscorlib.dll 中) C# public static Object CreateInstance (Type type)Activator.CreateInstance 泛型方法 ()注意:此方法在 .NET Framework 2.0 版中是新增的。 创建类型的一个实例,该类型由指定的泛型类型参数指定。 命名空间:System程序集:mscorlib(在 mscorlib.dll 中) C# publ. 阅读全文
posted @ 2012-01-30 10:24 八神吻你 阅读(18810) 评论(4) 推荐(4) 编辑
摘要:资源的清理using语句的用法前言垃圾回收是‘运行时’的一个重要的职责。但是,垃圾回收的宗旨是提高内存的利用。它不是用来清理文件的句柄、数据库链接字符串、端口或者其他有限资源的。一、终结器的用途终结器允许程序员编写代码来清理一个类的资源。但是,终结器不能从代码中显示的调用,而是由垃圾回收器负责对一个对象实例调用终结器。因此,开发者不能在编译时确定执行终结器的时间,唯一能确定的是终结器会在上次使用这个对象后,并在应用程序结束之前的某个时刻运行。终结器的定义: public class TemporaryFileStream1 { ~TemporaryFileStream1() { Close() 阅读全文
posted @ 2011-11-18 17:54 八神吻你 阅读(1717) 评论(2) 推荐(1) 编辑
摘要:前言 委托类型的实例是存储着一个方法,并通过委托来调用那个方法,但是委托还有其他的用途。 先讲一个模式:publish-subscribe(订阅-发布) 它是应对这样的一个场景情形:就是把单一事件的通知广播给多个订阅者。 这句话通俗一点讲的话就是: 现在有方法A、B、C、D、E,自己想调用这五个方法中的全部或者部分方法。但是又不想一个一个显式的去调用,因为如果方法很多的话就会形成一个代码的堆砌,不够简洁,时间一长也不好维护。这时候有一个想法就是能有一个“方法F”来收集自己想要调用的方法就好了,最后自己只要调用“方法F”就可以调用所有自己想要调用的方法。 到这边有人... 阅读全文
posted @ 2011-11-16 17:16 八神吻你 阅读(1502) 评论(0) 推荐(0) 编辑
摘要:平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错。尤其是插入中英文混合字符串时,SQL Server中一般中文要占两个字节,所以对混合型的字符串就要作一个处理,统一按字节长度来计算字符串长度,方法如下: /// <summary> /// 获取指定字节长度的中英文混合字符串 /// </summary>private string GetString(string str, int len){string result = string.Empty;// 最终返回的结果int byte 阅读全文
posted @ 2011-11-14 10:11 八神吻你 阅读(5393) 评论(0) 推荐(0) 编辑
摘要:1、委托定义:定义委托就是定义一类方法的类型,方法类型分类原则是根据参数和返回值的不同来分类的。什么!你说方法分类还考虑返回值的类型吗?方法的重载可不会考虑方法的返回值的不同,只看方法的参数列表的啊。是的,方法重载中的方法区分的方法是不看返回值的,但是定义委托是看方法返回值的。例如:两个int参数返回一个Boolean,这就可以用委托定义一类方法,c#的表达式:public delegate bool MyDelegate(int i,int j);这时候MyDelegate就是指有两个int参数,bool返回值的方法类型,他的实类就是一个包含两个int参数,bool返回值的方法。当委托作为. 阅读全文
posted @ 2011-11-09 14:39 八神吻你 阅读(1744) 评论(1) 推荐(1) 编辑
摘要:escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-ZencodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-ZencodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z1.JS: escape : js使用数据时可以使用escape例如:搜藏中history纪录。0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponen 阅读全文
posted @ 2011-11-08 13:03 八神吻你 阅读(15353) 评论(3) 推荐(8) 编辑