/*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#任务导引教程>练习十的更多相关文章

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

    在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...

  2. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明

    微信官方的多客服接口原理是通过用户发送的信息,开发者服务器返回一条指定类型的响应信息,使用户的对话状态切换到官方的多客服状态(持续一段时间),这段时间内用户发送的所有信息都不会到达开发者的服务器,而是 ...

  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

    紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAu ...

  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重

    为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都 ...

  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

    前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制

    在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...

  8. 【OpenCV新手教程之十二】OpenCV边缘检測:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...

  9. 【OpenCV新手教程之十八】OpenCV仿射变换 &amp; SURF特征点描写叙述合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)  ...

随机推荐

  1. 聊聊我对 GraphQL 的一些认知

    每隔一段时间就能看到一篇 GraphQL 的文章,但是打开文章一看,基本上就是简单的介绍下 GraphQL 的特性.很多文章其实就是 github 上找个 GraphQL 的项目,然后按照对应的 de ...

  2. Vuls 漏洞扫描工具部署及效果展示

    Vuls 漏洞扫描工具部署及效果展示 介绍 Vuls根据NVD,OVAL等数据对主流Linux系统进行扫描,并具有完善的报告. 支持系统 Distribution Release Alpine 3.3 ...

  3. Linux命令(二)

    1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...

  4. 每日一题,是否存在(c语言)

    每日一题:1.是否存在 是否存在描述猫咪非常喜欢饼干,尤其是字母饼干.现在,她得到一些字母饼干,她希望选择他们中的一些拼写某些单词. 你的任务是确定她是否可以拼出自己想要的单词. 输入输入包含若干测试 ...

  5. Coursera Deep Learning笔记 逻辑回归典型的训练过程

    Deep Learning 用逻辑回归训练图片的典型步骤. 笔记摘自:https://xienaoban.github.io/posts/59595.html 1. 处理数据 1.1 向量化(Vect ...

  6. [Beta]the Agiles Scrum Meeting 2

    会议时间:2020.5.11 20:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 yjy 修复bug将自动评测改为异步HTTP请求 tq 实现查看.删除测试点功能的后端将自动评测改为异 ...

  7. 微信小程序实现上拉和下拉加载更多

    在上一篇文章中,我们知道了使用 scroll-view 可以实现上拉加载更多,但是由于 scroll-view 的限制,它无法实现下拉加载更多,这篇文章我们使用 view 组件来实现 上拉和下拉加载更 ...

  8. 2021.9.25考试总结[NOIP模拟61]

    终于有点阳间题了然而挂了60pts 哈哈 T1 交通 类似简单题,限制看似很复杂,但不难发现当确定一条边是否被删后会产生裙带关系,很多边会跟着自动被确定是否被删. 仔细观察可以得出这种关系会构成偶环结 ...

  9. 设计的MOS管三极管简单开关电路驱动能力不够1

    您需要 登录 才可以下载或查看,没有帐号?注册 x . ?& P' U5 r/ ~& `: B 用AOD409设计的开关电路为什么驱动能力不够,请大家帮忙分析一下原因啊.这个电路作用就 ...

  10. 『学了就忘』Linux基础 — 11、通过setup工具配置Linux系统IP地址

    目录 1.setup命令介绍 2.使用setup命令配置IP (1)执行setup命令 (2)进入图形化配置界面 (3)选择配置IP还是DNS (4)选择要配置的网卡 (5)进入IP地址配置页面 (6 ...