C# 程序员参考--事件教程(转)
本教程展示如何在 C# 中声明事件、调用事件和挂接到事件。教程C# 中的“事件”是当对象发生某些有趣的事情时,类向该类的客户提供通知的一种方法。事件最常见的用途是用于图形用户界面;通常,表示界面中的控件的类具有一些事件,当用户对控件进行某些操作(如单击某个按钮)时,将通知这些事件。但是事件未必只用于图形界面。事件为对象提供一种通常很有用的方法来发出信号表示状态更改,这些状态更改可能对该对象的客户很有用。事件是创建类的重要构造块,这些类可在大量的不同程序中重复使用。使用委托来声明事件。如果您尚未学习“委托
C# 程序员参考--不安全代码教程(转)
该教程说明如何在 C# 中使用不安全代码(使用指针的代码)。教程在 C# 中很少需要使用指针,但仍有一些需要使用的情况。例如,在下列情况中使用允许采用指针的不安全上下文是正确的: 处理磁盘上的现有结构 涉及内部包含指针的结构的高级 COM 或平台调用方案 性能关键代码不鼓励在其他情况下使用不安全上下文。具体地说,不应该使用不安全上下文尝试在 C# 中编写 C 代码。警告 使用不安全上下文编写的代码无法被验证为安全的,因此只有在代码完全受信任时才会执行该代码。换句话说,不可以在不受信任的环境中执行不安全代码。例如,不能
C# 程序员参考--属性教程(转)
本教程展示如何创建自定义属性类,如何在代码中使用它们,以及如何通过反射查询它们。教程属性提供功能强大的方法以将声明信息与 C# 代码(类型、方法、属性等)相关联。与程序实体关联后,属性可在运行时查询,并可以以任意多种方式使用。属性的用法示例包括: 将帮助文档与程序实体关联(通过 Help 属性)。 将值编辑器关联到 GUI 框架中的特定类型(通过 ValueEditor 属性)。除一个完整的示例外,本教程还包括以下主题: 声明属性类 第一件需要做的事情是声明属性。使用属性类 创建属性后,随即将属性与特定的程序元素关联。通过反射访
C# 程序员参考--条件方法教程(转)
本教程演示条件方法,它们提供一种功能强大的机制,通过它可以根据是否定义了预处理器符号来包括或省略方法调用。示例文件请参见“条件方法”示例以下载和生成本教程中讨论的示例文件。教程条件方法使开发人员能够创建这样的方法,可将对这些方法的调用放在代码中,然后编译期间根据预处理符号包括或省略这些调用。假定您想在调试版本中启用某些断言代码,而在发布版本中禁用它们。在 C++ 中,有不止一种方法可以将此功能包含到您的代码中,例如: 使用 #ifdef 同时定义宏的调试版本和发布版本。调试版本调用跟踪代码,而发布版本不执行任
C# 程序员参考--显式接口实现教程(转)
本教程演示如何显式实现接口成员以及如何从接口实例访问这些成员。教程实现接口的类可以显式实现该接口的成员。当显式实现某成员时,不能通过类实例访问该成员,而只能通过该接口的实例访问该成员。本教程包含两个示例。第一个示例阐释如何显式实现和访问接口成员。第二个示例展示如何实现具有相同成员名的两个接口。示例 1本示例声明一个 IDimensions 接口和一个 Box 类,该类显式实现接口成员 Length 和 Width。通过接口实例 myDimensions 访问这些成员。// explicit1.csinterface IDimensions { float Length(); float Width();}cl
C# 程序员参考--结构教程(转)
本教程介绍结构的语法和用法。它还涉及类与结构之间的重大差异。示例文件请参见“结构”示例以下载和生成本教程中讨论的示例文件。教程此教程包括两个示例。第一个示例向您展示如何声明和使用结构,而第二个示例演示向方法传递实例时结构和类之间的差异。还向您介绍下列主题: 结构与类 堆还是堆栈? 构造函数和继承 结构上的属性示例 1本示例声明一个结构,它有三个成员:一个属性、一个方法和一个私有字段。本示例创建该结构的一个实例,并将其投入使用:// struct1.csusing System;struct SimpleStruct{ private int xval; publi
C# 程序员参考--XML 文档教程(转)
本教程展示如何使用 XML 将代码存档。教程C# 提供一种机制,供开发人员使用 XML 将其代码存档。在源代码文件中,以下代码行可以作为注释处理并放在文件中:以 /// 开始的行;在用户定义的类型(如类、委托或接口)、某成员(如字段、事件、属性或方法)或某命名空间声明之前的行。示例下面的示例提供对某个已存档的类型的基本概述。若要编译该示例,请键入以下命令行:csc XMLsample.cs /doc:XMLsample.xml这将创建 XML 文件 XMLsample.xml,您可以在浏览器中或使用 TYPE 命令查看该文件。// XMLsample.cs// compile with: /doc:XMLsample
C# 程序员参考--运算符重载教程(转)
本教程演示用户定义的类如何重载运算符。示例文件请参见“运算符重载”示例以下载和生成本教程中讨论的示例文件。教程运算符重载允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。本教程包含两个示例。第一个示例展示如何使用运算符重载创建定义复数加法的复数类。第二个示例展示如何使用运算符重载实现三值的逻辑类型。示例 1本示例展示如何使用运算符重载创建定义复数加法的复数类 Complex。本程序使用 ToString 方法的重载显示数字的虚部和实部以及加法结果。// complex.csusing System;public str
C#编译器(转)
以下是国外人写的一个C#编译器,当然由于他依然使用的.Net下的FCL,所以不可能是真正意义上的编译器, 飞刀我介绍出来,只是可以让大家摆脱csc的约束,在Win界面上完成编译. 你必须以下面的步骤完成: 1.建立一个CSharpCodeProvider 实例(如果是使用Visual Basic则使用VBCodeProvider) 2.包含接口ICodeCompiler 3.提供CompilerParameters的参数 4.使用CompileAssemblyFromSource方法编译。 5.运行CompilerResults 6.执行编译好的程序 编译的代码可以是写在文本框中的字符串,当然也可以源文件。 以下是源代码:),过两天我修改一下后提供整
C# Namespace(转)
在C#程序中,每提及一个"名称",编译器就要对这个"名称"进行"决议(resolve)";简言之,就要让这个"名称"可见(Visible)。举例说明一下:Console.WriteLine("Hello ,EdgarSun!"); 此时编译器将无法对Console这一"名称"进行决议(resolve);这种情况和C中用strcpy()函数而没包含string这个头文件一样,C中是这样解决的:#include <string.h>。C#中using指令提供了一种解决方案:using System;这条指令告诉编译器到System这个"命名空间"中查找无法决议(resolve)的"
C#中构造函数和析构函数 的用法(转)
摘 要:构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误。本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项。 关键字:构造函数;析构函数;垃圾回收器;非托管资源;托管资源一.构造函数与析构函数的原理 作为比C更先进的语言,C#提供了更好的机制来增强程序的安全性。C#编译器具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程序员的大忙。但是程序通过了编译检查并不表示错误已经不存在了,
漫谈C#编程中的多态与new关键字(转)
1. 你通常怎样用多态? 假设我有一个类,里面有一个 PrintStatus 方法,用于打印实例的当前状态,我希望该类的派生类都带有一个 PrintStatus 方法,并且这些方法都用于打印其实例的当前状态。那么我会这样表达我的愿望: // Code #01class Base{ public virtual void PrintStatus() { Console.WriteLine("public virtual void PrintStatus() in Base"); }} 于是我可以写一个这样的方法:// Code #02public void DisplayStatusOf(Base[] bs){ foreach (Base b in bs) { b.PrintStatus(); }} bs 中可能包含
六种快速修理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#中的string类型(转)
目的 本文的目的在于揭示和DOTNET及C#相关的一些常见的和不常见的问题。在这些问题中我的第一篇文章和string数据类型有关,string数据类型是一种引用类型,但是当和其他引用类型比较的时候,很多开发人员可能并不能完全理解它的行为。 问题 对于常见的引用类型,当改变一个对象别名的值时,这种变化也同样会在一个实际的对象中表现出来;反之亦然。但是对于string类型,似乎不是这样的。 解释 引用类型 假设我们有一个类MyType,这个类有一个属性Name;我们还有一个类AppType,这个类提供Main()方法来运行这个程
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
集合类:VBA集合对象的安全包装(转)
你迟早都要管理一组由VBA类模块创建的自定义对象,VBACollection对象是实现这一目的的理想工具。我们在该杂志的Premiere期刊中曾经介绍过Collections,并且阐述了如何使用Collection对象来存储其他对象。虽然该项技术十分有用,但它确实还存在一些局限。在本文中,我们讨论了这些局限,并向你展示如何通过使用(你猜是什么)类模块来克服这些局限。 Collections中遇到的麻烦 Collections对象中到底有什么问题呢?它似乎存储对象存储得非常好。事实上,它工作起来的确是太好了。Collections对象得最大问题是它可以存储到任何数据类型得引用
C#中构造函数和析构函数的用法(转)
摘 要:构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误。本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项。 关键字:构造函数;析构函数;垃圾回收器;非托管资源;托管资源一.构造函数与析构函数的原理 作为比C更先进的语言,C#提供了更好的机制来增强程序的安全性。C#编译器具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程序员的大忙。但是程序通过了编译检查并不表示错误已经不存在了,
C#中结构与类的区别(转)
目录类与结构的实例比较 类与结构的差别 如何选择结构还是类 一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight() { //implement something } } 类示例: public class TestTime { int hours; int minutes; int seconds; public void passtime() { //implementation of behavior } } 调用过程: public class Test { public static ovid Main { Person Myperson=new Person //声明结构 TestTime Mytime=New TestTime //声明类 } } 从上面的例子中我们可以看到,类