C#语法讲解
时间:2010-10-24 来源:Cleak
using System;
namespace ConsoleApplication3//委托和类相似,只要可以声明类的地方都能够声明委托,委托 的声明语法:
//关键字+返回类型+委托名+与之配合使用的方法的返回类型的参数声明.在主函数中,首先得像类一样实例,一次,实例是带上方法,
//然后使用实例的对象进行,传参数.ok;e
{
delegate void EatDelegate(string food);
class myDelegate
{
public static void zsEat(string food)
{
Console.WriteLine("张三吃"+food);
}
}
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
myDelegate.zsEat("西瓜");
EatDelegate zs=new EatDelegate(myDelegate.zsEat);
zs("苹果");
}
}
}
2.索引器
using System;
using System.Collections;
//索引器可以重载;索引器的声明使用关键字this
class IndexClass//带索引器的类
{
private Hashtable name=new Hashtable();
public string this[int index]//A索引器
{
get{return name[index].ToString();}
set{name.Add(index,value);}
}
public int this[string aName]
{
get
{
foreach(DictionaryEntry d in name)
{
if (d.Value.ToString() == aName)
{
return Convert.ToInt32(d.Key);
}
}
return -1;
}
set{name.Add(value,aName);}
}
}
class test
{
public static void Main()
{
IndexClass b=new IndexClass();
b[100]="张三";
b[200]="李四";
b[300]="王五";
Console.WriteLine("编号是100的员工是"+b[100]);
Console.WriteLine("编号是200的员工是"+b[200]);
Console.WriteLine("编号是300的员工是"+b[300]);
Console.WriteLine("张三的编号是"+b["张三"]);
Console.WriteLine("李四的编号是"+b["李四"]);
Console.WriteLine("王五的编号是"+b["王五"]);
}
}
------------------------------------------------------------------
using System;//索引器提供了把 数组封装到类里面的方法.是数组和似有字段一样同样的安全,索引器的索引
//不一定要是整形们可以是,其他的类型,可以是一个字符串
namespace ConsoleApplication2
{
class ArrClass//普通的不带索引器的类
{
public ArrClass(string mm)//一个构造函数
{
this.name=mm;
}
private string name;
public string Name//一个属性,每个属性都对应一个似有字段
{
get
{
return name;
}
}
}
class Indexor //带有索引器的类
{
private string[] name=new string[10];
public string this[int no] //声明了一个索引器.索引器就是带有参数的属性,在声明一个属性时,首先需要声明与之相关的
//似有字段,与之相似的是,在声明索引器时,首先要声明与之相关的似有数组.
{
get
{
return name[no];
}
set
{
name[no]=value;
}
}
}
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
ArrClass[] aa=new ArrClass[10];
aa[0]=new ArrClass("haohaizi");//需要传递参数.
Console.WriteLine("aa[0]="+aa[0].Name);
Indexor kk=new Indexor();
kk[0]="haohaizi";//直接等于即可.不需要传递任何的参数
kk[1]="huaihaizi";
Console.WriteLine("kk[0]="+kk[0]);
}
}
}
--------------------------------------------
using System;
using System.Collections;
//索引器(indexer)允许类或结构的实例按照与数组相同的方式进行索引.
//索引器类似于属性,不同之处在于它们的访问器采用参数.也被成为有参属性.
//索引器没有自己的名称,访问时通过它归属的对象.索引器的声明和类的声明
//是一样的,其实它就是一个类.给索引器赋值和跟数组赋值一样,直接等于就可以了.
//在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器
//用于处理和表现类似于key和value的键值对,其中key通常可以用来快速查找,key是
//区分大小写的;value用于存储对应于key的值.Hashtabel中key/value键值对均为
//object类型,所以hashtable可以支持任何类型的key和value键值对.向Hashtable中
//加数据是通过Add函数来完成.可以通过键来访问值.
namespace MyIndexer
{
class IndexClass//带索引器的类
{
private Hashtable name=new Hashtable();
public string this[int index]//A索引器
{
get{return name[index].ToString();}
set{name.Add(index,value);}
}
public int this[string aName]//B索引器
{
get
{
foreach(DictionaryEntry d in name)
{
if(d.Value.ToString()==aName)
{
return Convert.ToInt32(d.Key);
}
return -1;
}
}
set{name.Add(value,aName);}
}
}// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
IndexClass b=new IndexClass();
b[100]="张三";
b[200]="李四";
b[300]="王五";
//调用A索引器
Console.WriteLine("编号是100的员工是"+b[100]);
Console.WriteLine("编号是200的员工是"+b[200]);
Console.WriteLine("编号是300的员工是"+b[300]);
//调用B索引器
Console.WriteLine("张三的编号是"+b["张三"]);
Console.WriteLine("李四的编号是"+b["李四"]);
Console.WriteLine("王五的编号是"+b["王五"]);
//使用set访问器
b["马六"]=400;
b["钱七"]=500;
//调用A索引器
Console.WriteLine("编号是400的员工是"+马六);
Console.WriteLine("编号是500的员工是"+钱七);
}
}
}