/*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. 深入理解Java虚拟机之JVM内存布局篇

    内存布局**** ​ JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...

  2. WinForm事件与消息

    WinForm事件与消息 消息概述以及在C#下的封装 Windows下应用程序的执行是通过消息驱动的.所有的外部事件,如键盘输入.鼠标移动.按动鼠标都由OS系统转换成相应的"消息" ...

  3. keeplived高可用配置

    前提:关闭防火墙,关闭selinux 1.主备配置 主 vim keeplived-lb01.confglobal_defs { router_id LVS_01 } vrrp_instance VI ...

  4. Java入门基础,必读!Java单行、多行和文档注释!

    在编写Java的过程中,我们需要对一些程序进行注释.除了方便自己阅读之外,我们还需要为他人更好地理解我们的程序.因此,我们需要对一些程序进行注释,这些注释可以是编程思想,也可以是程序的作用,可以说是J ...

  5. CF280C Game on tree(期望dp)

    这道题算是真正意义上人生第一道期望的题? 题目大意: 给定一个n个点的,以1号点为根的树,每一次可以将一个点和它的子树全部染黑,求染黑所有点的期望 QwQ说实话,我对期望这种东西,一点也不理解... ...

  6. 不会SQL也能做数据分析?浅谈语义解析领域的机会与挑战

    笔者按: 在第5次AI TIME PhD Debate上,笔者邀请了部分国内外语义解析领域的杰出华人学者共话语义解析的过去,现状和未来.本博客为笔者根据视频讨论总结的干货整理.对原视频感兴趣的同学可以 ...

  7. Golang通脉之指针

    指针的概念 指针是存储另一个变量的内存地址的变量. 变量是一种使用方便的占位符,用于引用计算机内存地址. 一个指针变量可以指向任何一个值的内存地址. 在上面的图中,变量b的值为156,存储在内存地址0 ...

  8. Vue3学习(八)之 Vue CLI多环境配置

    一.前言 这里相对于之前就没那么麻烦了,通俗点说就是使用配置文件来管理多环境,实现环境的切换. 二.实现切换 1.增加开发和生产配置文件 在web的根目录下,创建开发环境切换配置文件.env.dev, ...

  9. 【UE4 设计模式】享元模式 Flyweight Pattern

    概述 描述 运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用. 由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻 ...

  10. Java:ConcurrentHashMap类小记-2(JDK7)

    Java:ConcurrentHashMap类小记-2(JDK7) 对 Java 中的 ConcurrentHashMap类,做一个微不足道的小小小小记,分三篇博客: Java:ConcurrentH ...