随笔分类 - C#
摘要:private void button1_Click(object sender, EventArgs e) { int nCnt = 0; List nNumList = new List(); for (int i = 0; i nNumList[i2] || nNumList[i2] > nNumList[i3] || nNumList[i3] > nNumList[i4] || nNumList[i4] > nNumList[i5] || nNumList[i5] > nNumList[i...
阅读全文
摘要:1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 7 namespace ConsoleApplication1 8 { 9 class Program10 {11 static void Main(string[] args)12 {13 //if(/* 填写内容,是的输出 hello word */)14 ...
阅读全文
摘要:1、泛型参数的约束 1、约束类型和参数 类名:只有这个类型的类或者从他继承的类才能作为类型实参 class:任何引用类型,包括类、数组、委托和接口都可以作为实参 struct:任何值类型都可以被用作类型实参 Interfacename:只有这个接口或者实现这个接口的类型才能用作类型实参 new():任何带有无参公共构造函数的类型都可以用作实参,这叫做构造函数约束 2、where子句可以以任何次序列输出。然而,where子句中的约束必须有特定的顺序 最多只能有一个主约束,如果有则必须放在第一位 可以有任意多的Interfacename约束 如果...
阅读全文
摘要:1、分部方法:定义申明和实现申明的签名和返回类型必须匹配,签名不能包含访问修饰符,默认是私有的,返回类型必须是void,参数列表不能带有out参数2、
阅读全文
摘要:1、暴露将模板页的属性和方法暴露出来,然后在特定的内容页中修改这些属性和方法。 <%@ MasterType VirtualPath="" %>引入模板页2、使用FindControl方法,实现在内容页中修改模板页信息——Master.FindControl()3、动态加载模板页,首先进行模板页和内容页的合并,不能在Load事件中动态加载模板页。唯一可以加载模板页的事件是PreInit,页面执行生命周期中触发的首个事件4、使用用户之前,必须先进行注册 <%@ Register TagPrefix="" TagName="&qu
阅读全文
摘要:public class MyResourceHog : IDisposable { //是否已经Disposed的标记 private bool alreadyDisposed = false; public void IDisposable.Dispose() { Dispose(true); GC.SuppressFinalize(this); } public virtual void Dispose(bool isDisposing) { if (alreadyDisposed) { return; } if (isDisposing) { Console.WriteLine(&qu
阅读全文
摘要:1、命名空间:Microsoft.VisualBasic.Devices程序集:Microsoft.VisualBasic(在 microsoft.visualbasic.dll 中)2、
阅读全文
摘要:1、委托是一个或多个函数指针的抽象,委托是类型安全的、面向对象和安全可靠的2、使用步骤 声明委托public delegate int DelegateClass (string info) 使用new关键字创建委托的一个实例DelegateClass obj1 = new DelegateClass(MethodA) 使用调用运算符()激活一个委托obj1("1")或者显式调用obj1.Invoke("2") 当对象不需要委托的时候,将委托实例设为null3、委托不能作为一个类的数据成员,也不能作为方法中的一个局部变量4、多个函数假如委托时,这些函数根
阅读全文
摘要:1、运算符重载不能定义新的运算符 垃圾收集程序(GC)负责管理动态内存。因而,new运算符不能在托管代码中被重载 数组运算符在C++中通常被重载,以创建一个安全的数组,这里通常检查栅栏柱错误。C#中,CLR会自动检测栅栏柱错误,从而使重载数组运算符的主要理由不复存在 在C#中,不是像在C++中那样重载赋值运算符,而是实现了IClone接口2、重载operator==和operator!=方法应该调用Equals方法,以保证一致性3、operator|和operator&函数的布尔重载将不执行短路运算,总是要对左、右操作数进行计算4、
阅读全文
摘要:1、和其他语言中的参数化多态相比,区别在于泛型的编译时和运行时的语义。2、泛型与参数化模板的主要区别是后者纯粹是基于编译时。参数化模块的实例在编译时展开为不同的类3、CLR执行泛型类型智能展开4、.NET FCL包含通用的集合类用于普通的数据算法,诸如堆栈、队列、动态数组和字典等,这些集合是基于对象的,其对性能有影响,妨碍了类型安全,而且有可能消耗可用的内存5、参数化集合包含在System.Collections.Generic命名空间中动态数组 List<T>LIFO列表 Stack<T>FIFO列表 Queue<T>键/值对集合 Dictionary&l
阅读全文
摘要:1、泛型类型 1、类、结构和接口都可以是泛型的。泛型类型有类型形参,它们是以后要完成的占位符。成为泛型不会改变控制类型的基本规则 2、2、约束 1、派生约束:派生约束要求类型实参与指定的类型关联,派生约束是由C#编译器实施的 值类型、密封类、开放式构造类型、基元类型、System.Array、System.Delegate、System.Enum和System.ValueType不能作为约束 2、接口约束:语法等同于派生约束 3、值类型约束:将一个类型形参限制为值类型,基元类型和结构都是值类型。使用struct关键字 4、引用类型约束:将一个类型形参限定为引用类型。引用类型一...
阅读全文
摘要:1、new修饰符 .NET支持按签名隐藏和按名称隐藏技术。C#只支持按签名隐藏2、派生类不能重写基类中的数据成员或静态成员,但可以使用new修饰符隐藏他们。使用此特征的时候,必须做好充分的代码编档工作3、abstract关键字使一个类是抽象的。抽象类的存在主要是为了继承,不能创建抽象类的实例。非抽象类是具体类,可以创建实体类的实例。静态类,值类型和接口不支持abstract修饰符4、接口的派生类中,实现的函数可以是虚的。派生类的子孙将继承这些已经实现的函数。然而,实现了一个接口的派生类的子孙不能强制转换为该接口类型,只有直接实现一个接口的类型才能强制转换为该接口类型。然后该类的子孙可以通过父.
阅读全文
摘要:1、命名空间的别名:using A = NamespaceZ.NamespaceY.NamespaceX; using指令不会出现累积现象,而是独立计算的 extern alias AssemblyName ,使用的时候 为AssemblyName::Namespace.MethodName2、Main入口点,如下为四种合法签名: static void Main(){} static int Main() {} static void Main(string[] args) {} static int Main(string[] args) {} Main必须是静态的,而且是私...
阅读全文
摘要:1、托管PE文件 一个托管PE文件包含 PE表头、CLR表头、元数据和IL代码 2、元数据--一些二进制数据,其中包含一些表 ModuleDef包含一个标识托管模块的条目,该条目包括模块的文件名和拓展名(不包含路径),以及一个模块版本ID(由编译器创建的GUID形式),不要试图重新命名PE文件,因为这将阻止CLR在运行时定位程序集 TypeDef托管模块中定义的每一个类型在TypeDef表中都有一个对应的条目,每个条目包括类型的名称及其基类型、一些标记(如public、private等)以及一些指针3、程序集是CLR的操作对象。也就是说CLR总是先加载包含清单元数据表的文件,然后利用该清单来获
阅读全文
摘要:CLR通用语言运行时CLR围绕类型展开CIL通用中间语言IL(有时候被成为托管代码)是CLR唯一理解的编程语言,所有的语言编译器都是先将源代码转换为IL,然后再交由CLR处理。使用IL,我们可以访问CLR提供的任何特性FCL (Framework Class Library)框架类库CTS (Common Type System)通用类型系统CLS(Common Language Specification)通用语言规范
阅读全文
摘要:1、特性参数 1、定位参数 2、命名参数 命名参数与特性对象的公有字段和属性对应。如果命名参数使用静态的或只读的字段和属性将会产生编译错误2、特性目标(应用于制定特性要应用的程序元素,它是可选的,不过有时候使用特性目标可以让特性的意图更加明显) 特性目标分类: 目标名称 可以应用到 all 任何元素 assembly 程序集 class 类 constructor 构造函数 delegate 委托 enum 枚举 event 事件 field 字段 interface 接口 method 方法 module 模块 param 参数 property 属性 return 返回值 struct 结
阅读全文
摘要:使用new运算符实例化引用对象时,它们被分配在托管堆上。CLR的内存分配非常高效,因为对象在堆上是顺序创建的。堆有一个特别的指针,它从堆的位置0开始,随着堆上所分配的对象的大小而增长。该指针的开始位置就是下一个对象的分配位置,这个过程是持续的,直到内存满的时候
阅读全文
摘要:1、定义接口类型 1、定义: [修饰符] interface IName [: 接口 [,多个接口]] { //方法 //属性 //索引 //事件 } 2、方法: 接口的方法没有实现 3、属性: 属性的实现与它的规范无关,使用属性主要的原因是封装实现 decimal PricePerTrade { get; set; } 4、索引: (类似于属性的索引) decimal this [string StockName] { get; set; } 5、事件: public dellegate void ChangeRegistrar (object sender, object evnt); e
阅读全文
摘要:原来多态不仅仅是方法1、方法多态2、属性多态 1 public class Contact 2 { 3 public virtual string Email { get; set; } 4 } 5 6 public class Customer : Contact 7 { 8 public override string Email 9 {10 get11 {12 return base.Email;13 }14 set 15 {16 base.Email = value;17 }18 }19 }3、索引器多态 1 public class SiteList 2 { 3 4 prote
阅读全文
摘要:1 class WebSite 2 { 3 //constructors 4 5 //destructors 6 7 //fields 8 9 //methods10 11 //properties12 13 //indexers14 15 //events16 17 //nested objects18 }
阅读全文

浙公网安备 33010602011771号