<C#任务导引教程>练习十
/*83,使用接口完成多继承问题 简化版*/
using System;
interface ITeacher
{
string Name
{
get;
set;
}
int Age
{
get;
set;
}
string Title
{
get;
set;
}
}
interface IStudent
{
string Sex
{
get;
set;
}
double Score
{
get;
set;
}
}
class Graduate : ITeacher, IStudent
{
public Graduate(string n, int a, string t, string s, double sco, float w)
{
Name = n;
Age = a;
Title = t;
Sex = s;
Score = sco;
wage = w;
}
string name = " ";
public string Name
{
get { return name; }
set { name = value; }
}
int age = 0;
public int Age
{
get { return age; }
set { age = value; }
}
string title = " ";
public string Title
{
get { return title; }
set { title = value; }
}
string sex = " ";
public string Sex
{
get { return sex; }
set { sex = value; }
}
double score = 0.0;
public double Score
{
get { return score; }
set { score = value; }
}
//public void Set(double w)//可要可不要
//{
// wage = w;
//}
public void show()
{
Console.WriteLine(" 基本信息: ");
Console.WriteLine(" 姓名:{0}", name);
Console.WriteLine(" 性别:{0}", sex);
Console.WriteLine(" 年龄:{0}", age);
Console.WriteLine(" 职称:{0}", title);
Console.WriteLine(" 工资:{0}", wage);
Console.WriteLine(" 成绩:{0}", score);
}
private double wage;
}
class Program
{
static void Main()
{
Graduate grad = new Graduate("王莉", 24, "助教", "女", 89.5, 1234.50f);
grad.show();
}
}
//84,若程序设计语言不支持多态性,不能成为面向对象语言
using System;
class Unstudent
{
protected int no;
protected string name;
protected int fee1, fee2, fee3, fee4, fee;
public void calfee()
{
Console.Write(" 学号:");
no = Convert.ToInt32(Console.ReadLine());
Console.Write(" 姓名:");
name = Console.ReadLine();
fee1 = 4800;
fee2 = 800;
fee3 = 400;
fee4 = 200;
fee = fee1 + fee2 + fee3 + fee4;
}
public void disp()
{
Console.WriteLine(" 学 费:{0}",fee1);
Console.WriteLine( " 住宿费:{0}",fee2);
Console.WriteLine(" 书本费:{0}",fee3);
Console.WriteLine(" 其他费:{0}",fee4);
Console.WriteLine(" 总费用:{0}",fee);
}
public void fn()
{
calfee();
disp();
}
}
class Graduate : Unstudent
{
public new void calfee()
{
Console.Write(" 学号:");
no = Convert.ToInt32(Console.ReadLine());
Console.Write(" 姓名:");
name = Console.ReadLine();
fee1 = 1100;
fee2 = 600;
fee3 = 200;
fee = fee1 + fee2 + fee3;
}
public new void disp()
{
Console.WriteLine(" 住宿费:{0}", fee1);
Console.WriteLine(" 书本费:{0}", fee2);
Console.WriteLine(" 其他费:{0}", fee3);
Console.WriteLine(" 总费用:{0}", fee);
}
}
class Program
{
static void Main()
{
Unstudent s1 = new Unstudent();
Graduate s2 = new Graduate();
Console.WriteLine("本科生收费");
s1.fn();
Console.WriteLine("研究生收费");
s2.fn();
}
}
//85,虚方法就是允许被其他派生类重新定义的方法,在方法声明时需要使用virtual修饰符
//virtual修饰符不能与static,cabstract,override修饰符同时使用,并且虚方法是从基类继承来的公有成员,因此virtual修饰符也不能与private修饰符同时使用
using System;
class A
{
public void F()
{
Console.WriteLine("A.F");
}
public virtual void G()
{
Console.WriteLine("A.G");
}
}
class B : A
{
public new void F()
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
}
class Program
{
static void Main()
{
B b = new B();
A a = b;
a.F();
b.F();
a.G();
b.G();
}
}
/*86,重写方法,使用了override修饰符,表明该方法是重写方法,主要用来使用相同的签名重写继承的虚方法,虚方法主要用来引入新方法,而重写方法则使
从基类继承而来的虚方法专门化从而提供虚方法的具体实现。重写与重载是不同的,重写是指在派生类中重新写过基类的虚方法,而重载则是指编写一个与已有方法同名的但参数
列表不同的方法。另外,override修饰符不能与new static virtual修饰符同时使用,重写方法只能用于重写基类中的虚方法,不能用来单独声明方法*/
using System;
class Unstudent
{
protected int no;
protected string name;
protected int fee1, fee2, fee3, fee4, fee;
public void calfee()
{
Console.Write(" 学号:");
no = Convert.ToInt32(Console.ReadLine());
Console.Write(" 姓名:");
name = Console.ReadLine();
fee1 = 4800;
fee2 = 800;
fee3 = 400;
fee4 = 200;
fee = fee1 + fee2 + fee3 + fee4;
}
public void disp()
{
Console.WriteLine(" 学 费:{0}",fee1);
Console.WriteLine( " 住宿费:{0}",fee2);
Console.WriteLine(" 书本费:{0}",fee3);
Console.WriteLine(" 其他费:{0}",fee4);
Console.WriteLine(" 总费用:{0}",fee);
}
public virtual void fn()
{
calfee();
disp();
}
}
class Graduate : Unstudent
{
public new void calfee()
{
Console.Write(" 学号:");
no = Convert.ToInt32(Console.ReadLine());
Console.Write(" 姓名:");
name = Console.ReadLine();
fee1 = 1100;
fee2 = 600;
fee3 = 200;
fee = fee1 + fee2 + fee3;
}
public new void disp()
{
Console.WriteLine(" 住宿费:{0}", fee1);
Console.WriteLine(" 书本费:{0}", fee2);
Console.WriteLine(" 其他费:{0}", fee3);
Console.WriteLine(" 总费用:{0}", fee);
}
public override void fn()
{
calfee();
disp();
}
}
class Program
{
static void Main()
{
Unstudent s1 = new Unstudent();
Graduate s2 = new Graduate();
Console.WriteLine("本科生收费");
s1.fn();
Console.WriteLine("研究生收费");
s2.fn();
}
}
/*87,在C#中virtual修饰符必须与override修饰符配合使用,因此在派生类中fn()要显式表示,virtual修饰符放在基类中,指明该函数成员为虚方法(函数),
override修饰符放在派生类中,以体现它是重写方法(函数。用抽象类编写程序,分别求矩形面积和圆的面积)*/
using System;
public abstract class Shapes
{
public abstract void disp();
}
class Rectangle : Shapes
{
protected int x, y;
public void setvalue(int d, int w)
{
x = d;
y = w;
}
public override void disp()
{
Console.WriteLine("矩形面积:{0}", x * y);
}
}
class Circle : Shapes
{
protected int x;
public void setvalue(int d)
{
x = d;
}
public override void disp( )
{
Console.WriteLine("圆面积:{0}", 3.14159 * x * x);
}
}
class Program
{
static void Main()
{
Rectangle r1 = new Rectangle();
Circle c1 = new Circle();
r1.setvalue(10, 5);
r1.disp();
c1.setvalue(10);
c1.disp();
}
}
//88,委托是C#中的一种引用类型,通过委托实例调用静态方法和实例方法示例
using System;
delegate void D(int n);
class C
{
public static void M0(int i)
{
Console.WriteLine("调用静态方法M0!={0}", i);
}
public static void M1(int i)
{
Console.WriteLine("调用静态方法M1!={0}", i);
}
public void M2(int i)//无static
{
Console.WriteLine("调用静态方法M2!={0}", i);
}
}
class Program
{
static void Main()
{
D cd0 = new D(C.M0);
cd0(1);
D cd1 = new D(C.M1);
cd1(2);
C t = new C( );
D cd2 = new D(t.M2);
cd2(3);
D cd3 = new D(cd2);
cd3(4);
}
}
<C#任务导引教程>练习十的更多相关文章
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...
- 无废话ExtJs 入门教程二十[数据交互:AJAX]
无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
微信官方的多客服接口原理是通过用户发送的信息,开发者服务器返回一条指定类型的响应信息,使用户的对话状态切换到官方的多客服状态(持续一段时间),这段时间内用户发送的所有信息都不会到达开发者的服务器,而是 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAu ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...
- 【OpenCV新手教程之十二】OpenCV边缘检測:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...
- 【OpenCV新手教程之十八】OpenCV仿射变换 & SURF特征点描写叙述合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨) ...
随机推荐
- 聊聊我对 GraphQL 的一些认知
每隔一段时间就能看到一篇 GraphQL 的文章,但是打开文章一看,基本上就是简单的介绍下 GraphQL 的特性.很多文章其实就是 github 上找个 GraphQL 的项目,然后按照对应的 de ...
- Vuls 漏洞扫描工具部署及效果展示
Vuls 漏洞扫描工具部署及效果展示 介绍 Vuls根据NVD,OVAL等数据对主流Linux系统进行扫描,并具有完善的报告. 支持系统 Distribution Release Alpine 3.3 ...
- Linux命令(二)
1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...
- 每日一题,是否存在(c语言)
每日一题:1.是否存在 是否存在描述猫咪非常喜欢饼干,尤其是字母饼干.现在,她得到一些字母饼干,她希望选择他们中的一些拼写某些单词. 你的任务是确定她是否可以拼出自己想要的单词. 输入输入包含若干测试 ...
- Coursera Deep Learning笔记 逻辑回归典型的训练过程
Deep Learning 用逻辑回归训练图片的典型步骤. 笔记摘自:https://xienaoban.github.io/posts/59595.html 1. 处理数据 1.1 向量化(Vect ...
- [Beta]the Agiles Scrum Meeting 2
会议时间:2020.5.11 20:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 yjy 修复bug将自动评测改为异步HTTP请求 tq 实现查看.删除测试点功能的后端将自动评测改为异 ...
- 微信小程序实现上拉和下拉加载更多
在上一篇文章中,我们知道了使用 scroll-view 可以实现上拉加载更多,但是由于 scroll-view 的限制,它无法实现下拉加载更多,这篇文章我们使用 view 组件来实现 上拉和下拉加载更 ...
- 2021.9.25考试总结[NOIP模拟61]
终于有点阳间题了然而挂了60pts 哈哈 T1 交通 类似简单题,限制看似很复杂,但不难发现当确定一条边是否被删后会产生裙带关系,很多边会跟着自动被确定是否被删. 仔细观察可以得出这种关系会构成偶环结 ...
- 设计的MOS管三极管简单开关电路驱动能力不够1
您需要 登录 才可以下载或查看,没有帐号?注册 x . ?& P' U5 r/ ~& `: B 用AOD409设计的开关电路为什么驱动能力不够,请大家帮忙分析一下原因啊.这个电路作用就 ...
- 『学了就忘』Linux基础 — 11、通过setup工具配置Linux系统IP地址
目录 1.setup命令介绍 2.使用setup命令配置IP (1)执行setup命令 (2)进入图形化配置界面 (3)选择配置IP还是DNS (4)选择要配置的网卡 (5)进入IP地址配置页面 (6 ...