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 //声明类 } } 从上面的例子中我们可以看到,类
C#.Net网络程序开发-Socket篇(转)
Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet不断扩展的需要。 抛开ISO/OSI模型的7层构架,单从TCP/IP模型上的逻辑层面上看,.Net类可以视为包含3个层次:请
C#基础—关于类(转)
类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。类定义了每个对象可以包含什么数据和功能,但类自己不能包含数据。比如一个类代表一个人,它就可以定义所以人相关的信息(身高、年龄、体重等)。使用时,事例化对象表示某一个人。类的成员可以分为两大类类本身所声明的以及从基类中继承而来的类的成员有以下类型􀁺 成员常量,代表与类相关联的常量值􀁺 域,即类中的变量􀁺 成员方法,复杂执行类中的计算和其它操作􀁺 属性,用于定义类中的值并对它们进行
漫谈C#编程中的多态与new关键字之二(转)
3. new:封印咒术 new 似乎给人一种这样的感觉,它的使用者喜欢打破别人的约定,然而,如果使用恰当,new 可以弥补基类设计者的“短见”。在 Creating a Data Bound ListView Control 中,Rockford Lhotka 就示范了如何封印原来的 ListView.Columns,并使自行添加的返回 DataColumnHeaderCollection 的 Columns 取而代之。 从 Output #01 中我们可以看到,new 只是把 Base.PrintStatus 封印起来而不是消灭掉,你可以解除封印然后进行访问。对于 Derived2 的使用者,解封的方法是把 Derived2 的实例转换成 Base 类型:// Code #06Bas
漫谈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 中可能包