C#锐利体验之第八讲 索引器与操作符重载(转)
索引器 索引器(Indexer)是C#引入的一个新型的类成员,它使得对象可以像数组那样被方便,直观的引用。索引器非常类似于我们前面讲到的属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。下面是典型的索引器的设计,我们在这里忽略了具体的实现。class MyClass{ public object this [int index] { get { // 取数据 } set { // 存数据 } }}索引器没有像属性和方法那样的名字,关键字this清楚地表达了索引器引用对象的特征。和属性一
C#锐利体验之第七讲 域与属性(转)
域 域(Field)又称成员变量(Member Variable),它表示存储位置,是C#中类不可缺少的一部分。域的类型可以是C#中任何数据类型。但对于除去string类型的其他引用类型由于在初始化时涉及到一些类的构造器的操作,我们这里将不提及,我们把这一部分内容作为“类的嵌套”放在“接口 继承与多态”一讲内来阐述。 域分为实例域和静态域。实例域属于具体的对象,为特定的对象所专有。静态域属于类,为所有对象所共用。C#严格规定实例域只能通过对象来获取,静态域只能通过类来获取。例如我们有一个类型为MyClass的对象MyObject,MyClass内的实例域in
六种快速修理C# Bug的方法(转)
.NET Framework中包含许多工具可以用来更快、更容易地编写正确的程序。但我们得面临这样的情况:出现bugs。不管程序多么简单,程序员都可能出错。根据我的经验,大多数程序的bugs出现在程序员之间的接口:当一个程序员编写的代码被另一个程序员调用时。不知何故,调用者破坏了代码编写时做的假设。是谁的过错呢?这并不要紧,更重要的是你能多快修好它?下面这些技巧将帮你在程序投入使用前更快地发现并解决这些问题。最终,这些技巧会帮你诊断任何的确在使用中出现的问题。测试假设条件测试假设条件是构建正确的程序最重要的一个方法。在
C#代表元及事件触发(转)
代表元是C#中比较复杂的概念,C#中的代表元和C/C++中的函数指针非常相似使用代表元可以把代表元内部方法的引用封装起来然后通过它使用代表元引用的方法。它有一个特性就是不需要知道被引用的方法属于那一个类对象只要函数的参数个数与返回类型与代表元对象一致。这样说可能比较抽象我下面举几个简单的例子希望能给广大初学者一些基本的认识//定义一个返回值为string的无参数的代表元注意这个代表元只能引用对象中返回值为string的无参数方法delegate string MyDelegate();public class MyClass{public string SayHello(){return &q
C#编译器(转)
以下是国外人写的一个C#编译器,当然由于他依然使用的.Net下的FCL,所以不可能是真正意义上的编译器, 飞刀我介绍出来,只是可以让大家摆脱csc的约束,在Win界面上完成编译. 你必须以下面的步骤完成: 1.建立一个CSharpCodeProvider 实例(如果是使用Visual Basic则使用VBCodeProvider) 2.包含接口ICodeCompiler 3.提供CompilerParameters的参数 4.使用CompileAssemblyFromSource方法编译。 5.运行CompilerResults 6.执行编译好的程序 编译的代码可以是写在文本框中的字符串,当然也可以源文件。 以下是源代码:),过两天我修改一下后提供整
理解C#中的string类型(转)
目的 本文的目的在于揭示和DOTNET及C#相关的一些常见的和不常见的问题。在这些问题中我的第一篇文章和string数据类型有关,string数据类型是一种引用类型,但是当和其他引用类型比较的时候,很多开发人员可能并不能完全理解它的行为。 问题 对于常见的引用类型,当改变一个对象别名的值时,这种变化也同样会在一个实际的对象中表现出来;反之亦然。但是对于string类型,似乎不是这样的。 解释 引用类型 假设我们有一个类MyType,这个类有一个属性Name;我们还有一个类AppType,这个类提供Main()方法来运行这个程
C#中使用指针(转)
我想许多C程序员不愿意学习Java的原因就是Java不支持指针,但是现在类似于Java的C#却已经支持了指针,你可以使用unsafe关键字来告诉编译器下面的函数或者代码是不安全的。一旦你使用了unsafe,那么你就可以在unsafe区域中使用指针。 程序1 using System; class nish { unsafe static void Increment(int* p) { //increment the int pointed to by p *p=*p+1; } public static void Main() { int i = 1; //we pass the address of the int to the function as it expects a pointer unsafe Increment(&i); //now w
c#中对文件的操作小结(转)
1、建立一个文本文件 public class FileClass { public static void Main() { WriteToFile(); } static void WriteToFile() { StreamWriter SW; SW=File.CreateText("c:MyTextFile.txt"); SW.WriteLine("God is greatest of them all"); SW.WriteLine("This is second line"); SW.Close(); Console.WriteLine("File Created SucacessFully"); } } 2、读文件 public class FileClass { public static void Main() { ReadFromFile("c:MyTextFile.txt
关于c#中的事件处理机制(转)
今天一朋友问我在程序中怎么实现事件。于是我总结了哈发出来。要明白事件,首先要知道什么是委托。在C#中委托允许开发人员将一个对象中的方法传递给另一个能调用该方法的类的某个对象。比如:可以将类AC中的一个方法ADD[前提是这个方法以被包含在某个委托中了]传递给另一个类WMS。此时类WMS就能调用类AC中的ADD了。当然不管你是以什么方式实现方法的传递了,可以是静态的,也可以是实例化的。。要实现一个委托,需要按照这样的不揍:A:申明委托对象。注意:参数一定要和你想要包含的方法的参数形式一致。public delegate void NeweggDele
关于C#静态构造函数的几点说明
静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。 以下是引用片段: class SimpleClass { // Static constructor static SimpleClass() { // } } 在使用静态构造函数的时候应该注意几点: 1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符