您的位置:首页 > 编程语言 > C#

C#基础学习笔记(中)

2010-02-22 13:10 525 查看
第十课:索引器
1.索引器比类数组效率高
2.索引器提供了把数组封装到类中的方法,可以更好的提高数据安全性。
3.索引器比数组更为灵活,可以使用字符传作为索引值(使用Hashtable)
4.索引器可以重载
语法实例
class SampleCollection<T> //带索引器的泛型类
{
private T[] arr = new T[100];
public T this[int i]
{
get
{
return arr[i];
}
set
{
arr[i] = value;
}
}
}

第十一课:委托(delegate)
11-1
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:
1.语法实例:委托是隐含的静态方法
delegate void EatDelegate(string food);
EatDelegate zs = new EatDelegate(zsSell);
zs("西瓜");
2.委托链
EatDelegate eat;
eat = zs+ls+ww; eat-=ww; eat+=ww;
3.匿名方法建立委托
EatDelegate eat = null
eat+=delegate(string food){Console.WriteLine("张三卖"+food)};
eat+=delegate(string food){Console.WriteLine("李四买"+food)};
eat+=delegate(string food){Console.WriteLine("王五偷"+food)};
eat("西瓜");
4.把委托作为方法的参数进行传递
eatTogeter("西瓜",zs,ls,ww)

第十二课:事件
事件发行者(Publisher)
事件订阅者(Subscriber)

事件声明
public delegate void Publish(); //声明委托作为事件代理
public event Publish OnPublish; //声明事件

定义事件的四个步骤
1.在事件发行者中定义一个事件,event关键字
2.在事件发行者中触发事件,先判断事件是否为空(委托链是否为空)
3.在事件订阅者中定义事件处理程序,处理程序必须与委托类型相同(有相同的返回这和参数)
4.向事件发行者订阅一个事件

.NET Framework事件设计准则
1.事件的命名准则应使用PascalCasing命名方式
2.声明delegate时,使用void类型作为返回值,EventName事件的事件委托是EventNameEventHandler
事件接受两个传入参数,一律命名为sender和e
3.定义一个提供事件数据的类。对类以EventNameEventArgs进行命名,从System.EventArgs派生该类,
然后添加所有事件特定成员。
public delegate void EventNameEventHandler(object sender,EventNameEventArgs e);
4.如果事件不需要传递任何数据,也要声明两个参数,e参数可以直接使用系统提供的System.EventArgs类。
如果需要传递参数则要从System.EventArgs继承一个类,并把数据放在里面。
public delegate void EventNameEventHandler(object sender,EventArgs e);
public event EventNameEventHandler EventName;
5.在引发事件的类中提供一个受保护的方法,以OnEventName进行命名。在该方法中引发该事件
protected virtual void OnEventName(EventArgs e)
{
if(EventName!=null)
{
EventName(this,e);
}
}

第十三课:虚方法 virtual 类的多态
1.new关键字 派生类的实例新建了一个同名的方法,实例中存在N个同名方法但功能不同,可以通过派生类和基类的类型转换分别访问
2.virtual override 派生类实例重写了自身所继承的基类的方法,使实例中存在多个同名同功能的方法,可以通过派生类和基类的类型转换分别访问
3.通过动态绑定(晚绑定)实现基类实例的多态。
4.base关键字调用基类的方法base.F();

第十四课:抽象类 abstract
1.声明语法
abstract class A
{
protected int _x;
abstract public int X; //抽象属性
{
get;
set;
}
abstract public void F(); //抽象方法
}

2.抽象类的构造函数
3.使用抽象类数组实现多态 A[] a = new A[3]

当所有子类使用相同功能时倾向使用虚方法,使用base调用
若子类没有相同的功能则使用抽象类

第十五课:接口
声明语法:
interface IDrivingLicence
{
void GetLicence(); //隐含具有public属性
}

class Teacher:IDrivingLicence
{
public void GetLicence() //必须使用public
{
//实现语句
}
}
接口成员
属性、方法、事件、索引器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: