楽兔不是兔 2019-11-13 01:34 采纳率: 50%
浏览 1217
已采纳

求助C#演示抽象类和接口的一个问题

问题:编写一个程序以演示抽象类和接口,要求如下:
(1)定义一个Employee抽象类,其中包含Name和Salary属性及Print()抽象方法。类似地,定义IPromotable和IGoodStudent两个接口,使它们都包含Promote()方法。
(2)从Employee()类派生出Shixi类,使其包含存储实习期的字段months。从Emphoyee类和IPromotable接口类派生出Programmer类,使其有存储加班时间的hours字段,并通过实现接口中的Promote()方法将薪水提高到1.5倍。
(3)从Employee类以及IPromotable和IGoodWorker接口派生出Manager类,使其具有存储秘书名字的mishu字段,并通过实现IPromotable接口中的Promote()方法将薪水提高到1.8倍,通过实现IGoodWorker接口中的Promote()方法输出经理职位晋升。派生类中重写Print()方法,输出职员的姓名和薪水,平均加班时间、秘书、加新后的薪水等信息。
编写一个程序以演示抽象类和接口,要求如下:
(1)定义一个Employee抽象类,其中包含Name和Salary属性及Print()抽象方法。类似地,定义IPromotable和IGoodStudent两个接口,使它们都包含Promote()方法。
(2)从Employee()类派生出Shixi类,使其包含存储实习期的字段months。从Emphoyee类和IPromotable接口类派生出Programmer类,使其有存储加班时间的hours字段,并通过实现接口中的Promote()方法将薪水提高到1.5倍。
(3)从Employee类以及IPromotable和IGoodWorker接口派生出Manager类,使其具有存储秘书名字的mishu字段,并通过实现IPromotable接口中的Promote()方法将薪水提高到1.8倍,通过实现IGoodWorker接口中的Promote()方法输出经理职位晋升。派生类中重写Print()方法,输出职员的姓名和薪水,平均加班时间、秘书、加新后的薪水等信息。
提示:两个接口包含相同名称的方法,注意体会显式接口实现的使用。程序运行结果如图1所示,类关系如图2所示。
代码:

using System;

namespace ConsoleApp8
{
    public abstract class Employee
    {
        protected String Name;
        protected double salary;
        abstract public void print();
    }
    public interface IPromotable
    {
        void Promote();
    }
    public interface IGoodWorker
    {
        void Promote();
    }
    public class Shixi : Employee
    {
        protected int months;
        public Shixi(String Name, int salary, int months)
        {
            this.Name = Name;
            this.salary = salary;
            this.months = months;
        }
        public override void print()
        {
            Console.WriteLine("实习生:  ");
            Console.WriteLine("姓名:  " + this.Name);
            Console.WriteLine("薪水:  " + this.salary);
            Console.WriteLine("实习期(月):  " + this.months);
        }
    }
    public class Programmer : Shixi, IPromotable
    {
        protected int hours;
        public Programmer(String Name, int salary, int hours):base(Name,salary,hours)
        {
            this.Name = Name;
            this.salary = salary;
            this.hours = hours;
        }
        public override void print()
        {
            Console.WriteLine("程序员");
            Console.WriteLine("姓名:" + this.Name);
            Console.WriteLine("薪水:" + this.salary);
            Console.WriteLine("平均加班时间:" + this.hours);
        }
        public void Promote()
        {
            Console.WriteLine("加班后的薪水:" + this.salary * 1.5);
        }
    }
    public class Manager : Programmer, IPromotable, IGoodWorker
    {
        protected int mishu;
        public Manager(String Name, int salary,int mishu):base(Name,salary,mishu)
        {
            this.Name = Name;
            this.salary = salary;
            this.mishu = mishu;
        }
        public override void print()
        {
            Console.WriteLine("经理");
            Console.WriteLine("姓名:" + this.Name);
            Console.WriteLine("薪水:" + this.salary);
            Console.WriteLine("秘书:" + this.mishu);
        }
        void IPromotable.Promote()
        {
            Console.WriteLine("加班后的薪水:" + this.salary * 1.8);
        }
        void IGoodWorker.Promote()
        {
            Console.WriteLine("经理是优秀的,所以获得职位的晋升");
        }
    }
    class program
    {
        static void Main(string[] args)
        {
            Shixi shixi = new Shixi("赵丰", 5500, 2);
            shixi.print();
            Console.WriteLine();

            Programmer programmer = new Programmer("张强", 45000, 4);
            programmer.print();
            IPromotable promotable = programmer;
            promotable.Promote();
            Console.WriteLine();

            Manager manager = new Manager("约翰", 120000, "玛丽");
            manager.print();
            IPromotable promotable1 = manager;
            IGoodWorker goodworker = manager;
            promotable1.Promote();
            goodworker.Promote();
        }
    }
}

问题:主方法里“玛丽”
CS1503 参数 3: 无法从“string”转换为“int”
不知道哪里错了

  • 写回答

2条回答 默认 最新

  • z467057213c 2019-11-13 08:57
    关注

    public Manager(String Name, int salary,int mishu):base(Name,salary,mishu)
    {
    this.Name = Name;
    this.salary = salary;
    this.mishu = mishu;
    }
    Manager构造函数第三个字段时int类型,你传入的是Manager manager = new Manager("约翰", 120000, "玛丽");,“玛丽”转int失败,报这个错误没毛病

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64