c6属性委托事件_第1页
c6属性委托事件_第2页
c6属性委托事件_第3页
c6属性委托事件_第4页
c6属性委托事件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章属性、索引器、委托和事件回顾继承是获得现有类的功能的过程创建新类所根据的基础类称为基类或父类,新建的类则称为派生类或子类base

关键字用于从派生类中访问基类成员override关键字用于修改方法、属性或索引器。new访问修饰符用于显式隐藏继承自基类的成员抽象类是指至少包含一个抽象成员(尚未实现的方法)的类。抽象类不能实例化重写方法就是修改基类中方法的实现。virtual关键字用于修改方法的声明显式接口实现是用于在名称不明确的情况下确定成员函数实现的是哪一个接口2目标理解属性及其不同的类型、实现理解和使用索引器实现委托定义和触发事件3属性简介3-1classEmployee{

privatestaticstring_name;

privatestaticstring_id;

staticvoidMain(string[]args) {

_name=Console.ReadLine();

_id=Console.ReadLine(); }}直接访问字段

不经验证

4属性简介3-2classEmployee{privatestaticstring_name;privatestaticstring_id;publicvoidSetId(value){ //验证输入长度小于2 if(_id.Length>2) _id=value;}publicstringGetId(){ return_id;}}方法SetId(Value)和GetId()分别读取和写入职员ID…Employeeemp;emp.SetId("A1");stringDepartment=emp.GetId()…每次都调用GetId()和SetId()方法会很繁琐属性5属性简介3-3classEmployee{privatestaticstring_name;privatestaticstring_id;publicstringId{ get { return_id; } set { //验证输入长度小于2 if(_id.Length>2) _id=value; } }}读取ID时调用将值赋给ID时调用

6属性类型

4-3[访问修饰符]数据类型属性名{set{};}只写属性只能赋值9属性类型4-4[访问修饰符]static数据类型属性名{ get{}; set{};}静态属性应用于整个类而不是类的实例只能访问类的静态成员10classSavingsAccount{

//类字段用于存储帐号、余额和已获利息

privateint_accountNumber;

privatedouble_balance;

privatedouble_interestEarned;

//利率是静态的,因为所有帐户获得的利息相同

privatestaticdouble_interestRate;

//构造函数初始化类成员

publicSavingsAccount(intaccountNumber,doublebalance) {

this._accountNumber=accountNumber;

this._balance

=balance; }

//只读AccountNumber

属性

publicintAccountNumber {

get {

return_accountNumber; } }演示……定义和调用属性4-1

只读属性

11定义和调用属性4-2staticvoidMain(string[]args){

//创建SavingsAccount的对象

SavingsAccountobjSavingsAccount= newSavingsAccount(12345,5000);;

Console.WriteLine("输入到现在为止已获得的利息和利率");

objSavingsAccount.InterestEarned= Int64.Parse(Console.ReadLine());

SavingsAccount.InterestRate= Int64.Parse(Console.ReadLine());

objSavingsAccount.InterestEarned+= objSavingsAccount.Balance* SavingsAccount.InterestRate; Console.WriteLine("获得的总利息为:{0}", objSavingsAccount.InterestEarned);}publicdoubleInterestEarned{

get {

return_interestEarned; }

set {

//验证数据

if(value<0.0) {

Console.WriteLine(“利息 不能为负数");

return; }

_interestEarned=value; }}将设置InterestEarned属性12定义和调用属性4-3staticvoidMain(string[]args){

//创建SavingsAccount的对象

SavingsAccountobjSavingsAccount= newSavingsAccount(12345,5000);;

Console.WriteLine("输入到现在为止已获得的利息和利率");

objSavingsAccount.InterestEarned= Int64.Parse(Console.ReadLine());

SavingsAccount.InterestRate= Int64.Parse(Console.ReadLine());

objSavingsAccount.InterestEarned+= objSavingsAccount.Balance* SavingsAccount.InterestRate; Console.WriteLine("获得的总利息为:{0}", objSavingsAccount.InterestEarned);}将设置InterestRate属性publicstaticdoubleInterestRate{

get {

return_interestRate; }

set {

//验证数据

if(value<0.0) {

Console.WriteLine(“利率不能为负数");

return; }

else {

_interestRate=value/100; }}13定义和调用属性4-4staticvoidMain(string[]args){

//创建SavingsAccount的对象

SavingsAccountobjSavingsAccount= newSavingsAccount(12345,5000);;

Console.WriteLine(“输入到现在为止已获得的利息和利率");

objSavingsAccount.InterestEarned= Int64.Parse(Console.ReadLine());

SavingsAccount.InterestRate= Int64.Parse(Console.ReadLine());

objSavingsAccount.InterestEarned+= objSavingsAccount.Balance* SavingsAccount.InterestRate; Console.WriteLine("获得的总利息为:{0}", objSavingsAccount.InterestEarned);}将检索Balance和InterestRate属性publicdoubleBalance{

get {

if(_balance<0)

Console.WriteLine("没有可用余额");

return_balance; }}14索引器[访问修饰符]数据类型this[数据类型标识符]{ get{}; set{};}语法15定义和调用索引器4-1演示……classPhoto{

string_title;

publicPhoto(stringtitle) {

this._title=title; }

publicstringTitle {

get {

return_title; } }}以Title属性表示照片将照片存放于数组photos中classAlbum {

//该数组用于存放照片

Photo[]photos;

publicAlbum(intcapacity) {

photos=newPhoto[capacity]; }16定义和调用索引器

4-2publicPhotothis[intindex]{

get {

//验证索引范围

if(index<0||index>=photos.Length) {

Console.WriteLine("索引无效");

//使用null指示失败

returnnull; }

//对于有效索引,返回请求的照片

returnphotos[index]; }

set {

if(index<0||index>=photos.Length) {

Console.WriteLine("索引无效");

return; }

photos[index]=value; }}带有int参数的Photo索引器读/写索引器17定义和调用索引器4-3publicPhotothis[stringtitle]{

get {

//遍历数组中的所有照片

foreach(Photopinphotos) {

//将照片中的标题与索引器参数进行比较

if(p.Title==title)

returnp; }

Console.WriteLine("未找到");

//使用null指示失败

returnnull; }}带有string参数的Photo索引器只读索引器18定义和调用索引器4-4staticvoidMain(string[]args){

//创建一个容量为3的相册

Albumfriends=newAlbum(3);

//创建3张照片

Photofirst=newPhoto("Jenn");

Photosecond=newPhoto("Smith");

Photothird=newPhoto("Mark");

//向相册加载照片

friends[0]=first;

friends[1]=second;

friends[2]=third;

//按索引检索

Photoobj1Photo=friends[2];

Console.WriteLine(obj1Photo.Title);

//按名称检索

Photoobj2Photo=friends["Jenn"];

Console.WriteLine(obj2Photo.Title);}

19委托Multiply(int,int){….}Divide(int,int){….}在运行时确定调用哪种方法委托和方法必须具有相同的签名---publicdelegateCall(intnum1,intnum2);---20定义委托2-1[访问修饰符]delegate返回类型委托名();

语法classDelegates{publicdelegateintCall(intnum1,intnum2);classMath{publicintMultiply(intnum1,intnum2){//实现}publicintDivide(intnum1,intnum2){//实现}}classTestDelegates{staticvoidMain(){ CallobjCall;MathobjMath=newMath(); objCall=newCall(objMath.Multiply);}}将方法与委托关联起来21定义委托2-2classDelegates{ //委托定义

publicdelegateintCall(intnum1,intnum2);

classMath {

//乘法方法

publicintMultiply(intnum1,intnum2) {

returnnum1*num2; }

//除法方法

publicintDivide(intnum1,intnum2) {

returnnum1/num2; } }staticvoidMain(string[]args){

//委托的对象

CallobjCall;

//Math类的对象

MathobjMath=newMath();

//将方法与委托关联起来

objCall=newCall(objMath.Multiply);

//将委托实例化

result=objCall(5,3);

System.Console.WriteLine("结果为{0}", result);

}

将方法与委托关联起来22事件抢答者宣布人抢答者“请听题~”集中注意力聆听其他人事件源事件的发布者事件的订阅人不关心未订阅该事件定义事件

为对象订阅该事件将发生的事件通知给订阅人23定义事件[访问修饰符]event委托名事件名;

语法publicdelegatevoiddelegateMe();privateeventdelegateMeeventMe;24订阅事件eventMe+=newdelegateMe(objA.Method);eventMe+=newdelegateMe(objB.Method);25通知订阅对象if(condition){

eventMe();}调用订阅特定事件的对象的所有委托26演示:示例4示例classTestEvents{

[STAThread]

staticvoidMain(string[]args) {

//委托的对象

DelegateobjDelegate=newDelegate();

//ClassA的对象

ClassAobjClassA=newClassA();

//ClassB的对象

ClassBobjClassB=newClassB();

//订阅该事件

objDelegate.NotifyEveryOne+= newDelegate.MeDelegate(objClassA.DispMethod);

objDelegate.NotifyEveryOne+= newDelegate.MeDelegate(obj

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论