c#密封类个方法-C#新手在密封类和密封方法处求解

问题描述

C#新手在密封类和密封方法处求解
//程序清单P7_6.csusing System;namespace P7_6{ class Program { static void Main() { BankCard[] cards = new BankCard[] { new BankCard(""001""8888"") new CreditCard(""002""8888"") new CreditCard(""003""8888"")}; foreach (BankCard c in cards) { c.Withdraw(2000); //c.Query(); } ((CreditCard)cards[1]).Query(); ((CreditCard)cards[2]).Query(); } } public abstract class Account { protected string id; protected decimal money; public Account(string id decimal money = 0) { this.id = id; this.money = money; } public abstract void Deposit(decimal x); public abstract bool Withdraw(decimal x); public virtual void Query() { Console.WriteLine(""账号{0}: 余额{1}"" id money); } } public class BankCard : Account { protected string password; public BankCard(string id string password decimal money = 0) : base(id money) { this.password = password; } public override void Deposit(decimal x) { money += x; } public override bool Withdraw(decimal x) { Console.Write(""请输入密码: ""); if (Console.ReadLine() != password) { Console.WriteLine(""密码错误""); return false; } if (money < x) { Console.WriteLine(""卡{0}余额不足"" id); return false; } money -= x; return true; } public sealed override void Query() { Console.Write(""请输入密码: ""); if (Console.ReadLine() != password) { Console.WriteLine(""密码错误""); return; } Console.WriteLine(""账号{0}: 余额{1}"" id money); } } public class CreditCard : BankCard { private decimal limit; public CreditCard(string id string password decimal limit = 5000) : base(id password 0) { this.limit = limit; } public new void Query() { Console.WriteLine(""剩余额度{0}"" limit + money); } public override bool Withdraw(decimal x) { if (x - money > limit) { Console.WriteLine(""卡{0}额度不足"" id); return false; } money -= x; return true; } }}代码如上所示,Bankcard类中密封了方法Query,但是在CreditCard中隐蔽该方法,在前面foreach语句中,第二,第三个CreditCard中都用的是Bankcard类中密封的方法Query,CreditCard不是对它重写了吗?还是foreach语句把其中的元素都认为的是Bankcard类

解决方案

 sealed封闭的方法,没办法再在派生类中重写了,你用了new那么按照派生类类型调用,调用的是派生类的方法,用基类类型,调用的是基类的方法。foreach (BankCard c in cards)因为c是bankcard类型,所以不会调用CreditCard的Withdraw/Query如果你想调用,需要先转换:if (c is CreditCard)    (c as CreditCard).Query();

解决方案二:
C#密封类、密封方法
C# 密封类和密封方法

时间: 2025-01-23 20:31:19

c#密封类个方法-C#新手在密封类和密封方法处求解的相关文章

c#.-C#新手在密封类和密封方法处的问题

问题描述 C#新手在密封类和密封方法处的问题 上个问题代码排版有问题,这次上图,希望有大神能来解........ 解决方案 抱歉,图片顺序有错.... 解决方案二: C#密封类.密封方法C# 密封类和密封方法

新手问题!如果改成用追加的方法想文件写内容!!为什么文件变大了!求解

问题描述 新手问题!如果改成用追加的方法想文件写内容!!为什么文件变大了!求解publicFsOutputStream(FileInfoinfo){base.file=newFileStream(info.FullName,FileMode.Create,FileAccess.ReadWrite,FileShare.None);}...........................this.myBodyStream.Seek(this.myBodyStream.Position,SeekOri

我的android程序方法超出了65535就如何解决了,求解???

问题描述 我的android程序方法超出了65535就如何解决了,求解??? 1C 我的android程序方法超出了65535就如何解决了,求解??? 解决方案 Android 解决65535的限制 使用android-support-multidex解决Dex超出方法数的限制问题让你的应用不再爆棚 解决方案二: 分解成多个apk,或者jar 解决方案三: http://blog.csdn.net/x_i_a_o_h_a_i/article/details/46544341 解决方案四: 很明显

html文件利用ajax方法 通过 servlet 获取数据库信息 显示乱码,求解?

问题描述 html文件利用ajax方法 通过 servlet 获取数据库信息 显示乱码,求解?suggest.html:<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><script language="JavaScript" type="text/javascript" sr

js入门之Function函数的使用方法【新手必看】_javascript技巧

在javascript里,函数是可以嵌套的. 如: function(){ funcrion square(x){ return x*x; } return square(10); } 在javascript里,将函数绑定给一个对象,用对象调用的函数称为方法,容易跟C#搞混. 一.函数的属性 在函数体内,可以通过arguments.length获取传入函数的实参个数. function fun1 (x,y){ document.write(arguments.length()); //输出2,传

如何使用抽出滤镜:PS抽出滤镜抠图方法讲解新手抠图教程

在制作图片的过程中,大家经常为抠图而感到困扰,今天我制作的这个教程是使用photoshop cs2以上版本都自带的一种抠图滤镜--抽出滤镜.         三联推荐:photoshop7.0迷你版免费下载    |  Photoshop CS5 中文免费下载  |  photoshop免费下载 他对于抠一些背景不是很复杂的图片是比较简单的,能够节省相当大的时间.会这个方法的人看看我写的对不对哈,有问题尽管提哈~~ 下边先介绍一下这个滤镜的位置:滤镜>>抽出.位置很容易找到.如下图: 下面我们

PhotoShop消失点滤镜的运用方法简单新手入门教程

消失点是这样一种功能,它允许您在包含透视平面(例如,建筑物侧面或任何矩形对象)的图像中进行透视校正编辑. 通过使用消失点,您可以在图像中指定平面,然后应用诸如绘画.仿制.拷贝或粘贴以及变换等编辑操作. 所有编辑操作都将采用您所处理平面的透视. 利用消失点,您不用再好像所有图像内容都在面对您的单一平面上一样来修饰图像. 相反,您将以立体方式在图像中的透视平面上工作. 当您使用消失点来修饰.添加或移去图像中的内容时,结果将更加逼真,因为系统可正确确定这些编辑操作的方向,并且将它们缩放到透视平面. 要

SEO之外链建设的方法总结 新手必看

中介交易 SEO诊断 淘宝客 云主机 技术大厅 很多朋友网站和内容做好之后,第一件事想的就是做外链,因为外链能给网站带来流量并且对SEO也有很大的作用.网上有很多关于外链建设的文章,教大家如何做外链,如何发外链等等.我在这里给用我的建设外链的方法给大家做个总结.下面列出的目前比较常用的几种外链建设的方法. 一.利用免费博客 这应该是我们最常用的外链建设方式了,很多人都说博客现在效果不大了,但我认为,只要你努力去做了,博客的权重培养起来,那是非常有用的.对于博客,也常有朋友问到说,是否可以利用博客

execute方法未用到-Action 中execute()方法报黄线

问题描述 Action 中execute()方法报黄线 解决方案 Action的execute()方法Action的execute()方法 解决方案二: 问题已经解决把private改为public就可以了.