随笔分类 -  编程语言C#

1 2 下一页

CLR Via C#: 类型基础
摘要:所有类型都从System.Object派生 一下两个类型定义是完全一致的 由于所有类型最终都从System.Object派生,所以可以保证每个类型的每个对象都有一组最基本的方法。公共实例方法: Equals GetHashCode ToString GetType 从System.Object派生的 阅读全文

posted @ 2017-11-06 15:04 LilianChen 阅读(264) 评论(0) 推荐(0)

CLR Via C#: CLR 的执行模型
摘要:CLR(Common Language Runtime)公共语言运行时:是一个可由多种编程语言使用的“运行时”。 编译源代码文件的过程: C# 源代码文件 -》 C# 编译器-》托管模块(中间语言和元数据) Basic 源代码文件 -》 Basic 编译器-》托管模块(中间语言和元数据) 托管模块的 阅读全文

posted @ 2017-10-23 14:57 LilianChen 阅读(222) 评论(0) 推荐(0)

C#:索引
摘要:1. 什么是索引索引是一组get和set访问器,类似于属性的访问器。2. 索引和属性和属性一样,索引不用分配内存来存储索引和属性都主要被用来访问其他数据成员,这些成员和它们关联,它们为这些成员提供设置和获取访问:(1)属性通常是访问单独的数据成员;(2)缩影通常是访问多个数据成员索引可以只有一个访问器,也可以两个都有索引总是实例成员,因此,索引不能被声明为static和属性一样,实现get和set访问器的代码不必一定关联到某个字段或属性。这段代码可以做任何事情或者什么也不做,只要get访问器返回某个指定类型的值即可3. 声明索引索引没有名称,在名称的位置是关键字this参数列表在方括号中间参数 阅读全文

posted @ 2013-10-09 12:30 LilianChen 阅读(1022) 评论(0) 推荐(1)

C#:算法题
摘要:1. 将字符串s1中所有出现在字符串s2中的字符删去 using System; namespace ConsoleApplication56 { class Program { static void Main(string[] args) { string s1 = "aaabbccabfcabcc"; string s2 = "abcd"; char[] results = new char[s1.Length]; int m=0; ... 阅读全文

posted @ 2013-04-22 17:32 LilianChen 阅读(1062) 评论(0) 推荐(2)

C#:事件
摘要:事件:事件是对象发送的消息,发送信号通知客户发生了操作。这个操作可能是由鼠标单击引起的,也可能是由某些其他的程序逻辑触发的。事件的发送方不需要知道哪个对象或者方法接收它引发的事件,发送方只需知道它和接收方之间的中介(delegate)。示例1: 1 using System; 2 using System.Windows.Forms; 3 4 namespace WindowsFormsApplication2 5 { 6 public partial class Form1 : Form 7 { 8 public Form1() 9 {10 ... 阅读全文

posted @ 2013-03-21 17:48 LilianChen 阅读(5785) 评论(0) 推荐(1)

C#:委托
摘要:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的扩展性。与使用一个类相似,在使用委托时,也需要经过两个步骤:定义要使用的委托。对于委托,定义它就是告诉编译器这种类型的委托代表了哪种类型的方法(在定义委托是,必须给出它所代表的方法签名和返回类型等全部细节。理解委托的一种好方式是把委托当作给方法签名和返回类型指定名称。)delegate void IntMethodInoker(int x);创建委托的一个或多个实例 1 using System; 2 阅读全文

posted @ 2013-03-19 18:04 LilianChen 阅读(6615) 评论(0) 推荐(3)

C#:数据类型转换
摘要:在类型转换过程中,有些类型之间可以直接转换(如int->double),而有些就必须显示强制转换(如double->int),类型转换遵循这样的规则:无论源变量中存什么值,转换成目标变量总是安全的(不会丢失数据,不会异常等等),那么就可以直接转换(隐式转换)。反之,如果转换成目标变量可能会出错,那么久必须显示的强制转换。1. 用户定义的数据类型转换:用户定义类型转换的语法如下:public static explicit operator T1(T2 value);public static implicit operator T1(T2 value);T1是目标类型,T2是源类型 阅读全文

posted @ 2013-03-18 17:44 LilianChen 阅读(2811) 评论(0) 推荐(2)

C#:运算符重载
摘要:运算符重载允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。用户定义的运算符实现的优先级总是高于预定义运算符实现:仅当没有适用的用户定义运算符实现时才会考虑预定义运算符实现。运算符可重载性+、-、!、~、++、--、true、false可以重载这些一元运算符。 true和false运算符必须成对重载。+、-、*、/、%、&、|、^、>可以重载这些二元运算符。==、!=、、=可以重载比较运算符。必须成对重载。&&、||不能重载条件逻辑运算符。 但可以使用能够重载的&和|进行计算。[]不能重载数组索引运算符,但可以定义索引器。( 阅读全文

posted @ 2013-03-15 17:56 LilianChen 阅读(43589) 评论(5) 推荐(10)

C#:Equals, ReferenceEquals与==的区别
摘要:==运算符:对于值类型,如果操作数的值相等,则==返回true,否则返回false。对于string以外的引用类型,如果两个对象引用同一个对象,则==返回true。对于string类型,==比较字符串的值。using System;class MainClass{ static void Main() { // Numeric equality: True Console.WriteLine((2 + 2) == 4);//return true,这里比较的是值相等 // Reference equality: different obje... 阅读全文

posted @ 2013-03-15 13:36 LilianChen 阅读(984) 评论(0) 推荐(0)

C#:引用类型和值类型的相等比较
摘要:引用类型的相等比较System.Object定义了3个不同的方法来比较对象的相等性:ReferenceEquals()和Equals()的两个版本。再加上比较运算符,实际上有4种进行相等比较的方式。ReferenceEquals()方法public static bool ReferenceEquals(object objA, object objB)ReferenceEquals()是一个静态方法,测试两个引用是否指向类的同一个实例,即两个引用是否包含内存中的相同地址。作为静态方法,它不能重写,所以只能使用System.Object的实现代码。如果提供的两个引用指向同一个对象实例,Refe 阅读全文

posted @ 2013-03-13 18:16 LilianChen 阅读(2782) 评论(0) 推荐(1)

C#:装箱和拆箱
摘要:装箱和拆箱:任何值类型、引用类型可以和Object类型之间进行转换。装箱转换是指将一个值类型隐式或显示地转换为一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的装箱就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中。有两种方式来查看包装以后的引用对象中包装的原始数据的类型:要判断原始类型是否是某个给定的原子类型,用is如果要返回一个字符串,可以用object类的GetType方法 1 using System; 2 3 namespace Console. 阅读全文

posted @ 2013-03-13 16:27 LilianChen 阅读(717) 评论(0) 推荐(0)

C#:foreach语句,yield语句
摘要:1. foreach语句C#编译器会把foreach语句转换为IEnumerable接口的方法和属性。1 foreach (Person p in persons)2 {3 Console.WriteLine(p);4 }foreach语句会解析为下面的代码段。调用GetEnumerator()方法,获得数组的一个枚举在while循环中,只要MoveNext()返回true,就一直循环下去用Current属性访问数组中的元素1 IEnumerator enumerator = persons. GetEnumerator();2 while (enumerator.MoveNext())3 { 阅读全文

posted @ 2013-03-08 13:15 LilianChen 阅读(6615) 评论(4) 推荐(4)

C#:Array类的排序
摘要:Array类实现了对数组中元素的冒泡排序。Sort()方法需要数组中的元素实现IComparable接口。System.String和System.Int32实现了IComparable接口,所以可以直接对包含这些类型的元素排序1 string[] names = { "Mike Lissick", "Mark Allen", "John Dixon", "Greg" };2 Array.Sort(names);3 foreach (string name in names)4 {5 ... 阅读全文

posted @ 2013-03-06 17:09 LilianChen 阅读(850) 评论(0) 推荐(0)

C#:定制类型的数组,Array类
摘要:1、 定制类型的数组 1 using System; 2 3 namespace ConsoleApplication4 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 Person[] myPersons = new Person[2];10 myPersons[0] = new Person("Lilian", "Chen");11 myPersons[1] = new Person("1"... 阅读全文

posted @ 2013-03-05 18:32 LilianChen 阅读(16498) 评论(0) 推荐(2)

C#:接口
摘要:接口名传统上以字母I开头,以便知道这是一个接口从接口中派生完全独立于从类中派生在声明接口成员的时候,只要指明接口成员的名称和参数就可以了,接口一旦被继承,子类需要提供方法的所有实现代码。接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员。不允许声明成员上的修饰符,即使是pubilc都不行,因为接口成员总是公有的,也不能声明为虚拟和静态的。如果需要修饰符,最好让实现类来声明。接口和类都可以继承多个接口using System;namespace ConsoleApplication3{ class Program { static void Main(stri... 阅读全文

posted @ 2013-03-05 16:37 LilianChen 阅读(1797) 评论(0) 推荐(3)

C#:抽象类和抽象函数, 密封类和密封方法
摘要:1. 抽象类和抽象函数C#中使用abstract关键字,将类和函数声明为抽象类或抽象函数抽象类不能实例化,抽象函数没有执行代码,必须在非抽象的派生类中重写抽象函数是虚拟的,但不需要提供virtual关键字,否则会报错如果类包含抽象函受,该类将也是抽象的,也必须声明为抽象的 abstract class MyAbstract { // 变量的定义不适用abstract关键字 private int i; // 属性 public abstract int count { get; set; } // 方法 ... 阅读全文

posted @ 2013-03-04 13:43 LilianChen 阅读(4803) 评论(2) 推荐(2)

C#:重载、重写、隐藏的定义
摘要:1. 继承的类型:实现继承:表示一个类型派生于一个基类型,拥有该基类型的所有成员字段和函数。派生类型的每个函数采用基类型的实现代码,除非在派生类型的定义中指定重写该函数的实现代码。借口继承:表示一个类型之继承了函数的签名,没有继承任何实现代码。2. 多重继承C#不支持多重实现继承,允许类型派生于多个接口。3. 虚方法把一个基类函数声明为virtual,该函数就可以在派生类中重写。4. 隐藏方法如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明为virtual和override,派生类方法就会隐藏基类方法。C#中使用关键字new声明我们要隐藏一个方法:class MyDerived 阅读全文

posted @ 2013-03-01 17:44 LilianChen 阅读(5638) 评论(0) 推荐(1)

C#:扩展方法和外部方法
摘要:1. 扩展方法扩展方法是静态方法,是类的一部分,但是实际上没有放在类的源代码中。扩展方法所在的类也必须被声明为staticC#只支持扩展方法,不支持扩展属性、扩展事件等。扩展方法的第一个参数是要扩展的类型,放在this关键字的后面,告诉编译期这个方法是Money类型的一部分。在扩展方法中,可以访问扩展类型的所有公共方法和属性。using System;namespace ConsoleApplication5{ class Program { static void Main(string[] args) { Money cash ... 阅读全文

posted @ 2013-03-01 14:41 LilianChen 阅读(4801) 评论(2) 推荐(3)

C#:const 和readonly的区别
摘要:const字段只能在该字段的声明中初始化;readonly字段可以在声明或者构造函数中初始化。因此,根据所使用的构造函数,readonly字段可能具有不同的值const字段为编译时常数;readonly字段可用于运行时常数const默认就是静态的,而readonly如果设置成静态的就必须显示声明看看下面的语句中static readonly和const能否互换:1. static readonly MyClass myins = new MyClass();不可以换成const。 new是需要执行构造函数的,所以无法在编译期间确定2. static readonly MyClass myins 阅读全文

posted @ 2013-02-28 16:37 LilianChen 阅读(776) 评论(2) 推荐(3)

C#:部分类,静态类
摘要:1. 部分类partial关键字的用法:把partial放在class, struct, interface关键字的前面,以用来把类,结构,接口放在多个文件中。 // Program 位于两个不同的源文件BigClassPart1.cs和BigClassPart2.cs // BigClassPart1.cs partial class Program { public void MethodTwo() { } } // BigClassPart2.cs partial class Program { public void MethodOne() { } static void Mai... 阅读全文

posted @ 2013-02-28 13:25 LilianChen 阅读(1137) 评论(2) 推荐(0)

1 2 下一页

导航