二十九、深入类

1、随机数:

生成设备ID:为公司购买的3台不同型号的计算机进行编号,编号的规则是“计算机型号 + 4位随即号”,编号完毕后,输出每台计算机的信息

static void Main(string[] args)
{
    Random random = new Random();//随机数对象
    for (int i = 0; i < 20; i++)
    {
        int result = random.Next(1, 10);//返回0-9的整数  random.NextBytes、random.NextDouble  
        //随机数:包含下限、不包含上限
        Console.WriteLine(result);
    }
    Console.ReadLine();
}

 

2、构造方法(函数)

【创建一个程序员类】

namespace demo13
{
    /// <summary>
    /// 程序员类
    /// </summary>
    public class SE
    {
        //当显示的编写一个构造方法的时候,默认无参构造方法自动销毁
        public SE() { }//为了防止main()方法中创建的se1 对象报错,写一个无参构造方法,这样SE()中放不放代码就都可以了
        public SE(string name)//定义带参数的构造方法
        {
            this.Name = name;
        }
        public string Name { get; set; }="匿名";
        /// <summary>
        /// 普通方法
        /// </summary>
        public void Writer()
        {
            Console.WriteLine($"{this.Name}正在写代码!");
        }
    }
}

【2】在main()中调用

SE se1 = new SE();//创建对象,默认调用了无参构造方法
SE se2 = new SE("张三");
se1.Writer();//普通方法需要手动调用

【为什么要用构造方法】通常用于初始化信息

构造方法中可以调用其他的方法,也可以写逻辑代码

   public class SE
    {
        public SE() { }

        public SE(string name,int pop)
        {
            this.Name = name;
            this.Pop = pop;
        }

        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }="匿名";

        /// <summary>
        /// 人气值
        /// </summary>
        public int Pop { get; set; }
    }
//命名参数
SE se3 = new SE("李四", 99);
SE se4 = new SE(name: "王五", pop : 50);
SE se6 = new SE();
se6.Name = "吴七";
se6.Pop = 86;
//初始化器
SE se5 = new SE() { Name = "赵六", Pop = 70 };

【构造方法的语法特点】方法名必须与类名相同 ;没有返回值类型

 

3、方法重载

static void Main(string[] args)
{
    //方法重载(构造方法、普通方法)
    //定义:在同一个类中,方法名称相同,参数的个数或者类型不同,称为方法的重载
    //好处:调用方便
    Console.WriteLine(1);
    Console.WriteLine(25.21);
    Console.WriteLine("abc");
    Console.WriteLine('a');
}

【案例】

实现公司不同级别员工的工资计算方法

项目经理PM:基础工资+项目奖金+分红

程序员SE:基础工资+考核工资

//创建一个程序员类SE
namespace demo13_2
{
    public class SE
    {
        public SE() { }
        public SE(string name, int age, int pop, int empno)
        {
            this.Name = name;
            this.Age = age;
            this.Pop = pop;
            this.EmpNo = empno;
        }
        /// <summary>
        /// 支付工资使用
        /// </summary>
        /// <param name="name"></param>
        /// <param name="basePay"></param>
        /// <param name="meritPay"></param>
        public SE(string name,float basePay,float meritPay)
        {
            this.Name = name;
            this.BasePay = basePay;
            this.MeritPay = meritPay;
        }

        public string Name { get; set; }
        public int Age { get; set; }
        /// <summary>
        /// 人气值
        /// </summary>
        public int Pop { get; set; }
        /// <summary>
        /// 员工编号
        /// </summary>
        public int EmpNo { get; set; }
        /// <summary>
        /// 基本工资
        /// </summary>
        public float BasePay { get; set; }
        /// <summary>
        /// 绩效工资
        /// </summary>
        public float MeritPay { get; set; }

        public void SayHi()
        {
            Console.WriteLine($"大家好!我是{this.Name},今年{this.Age}岁,工号是{this.EmpNo},我的人气值高达{this.Pop}");
        }

        public void SayHi(string caiyi)
        {
            Console.WriteLine($"大家好,我叫{this.Name},我来给大家表演{caiyi}");
        }
    }
}
//创建项目经理类PM
namespace demo13_2
{
    public class PM
    {
        public PM() { }
        public PM(string name,int age,int manageyear)
        {
            this.Name = name;
            this.Age = age;
            this.ManageYear = manageyear;
        }
        /// <summary>
        /// 支付工资使用
        /// </summary>
        /// <param name="name"></param>
        /// <param name="basePay"></param>
        /// <param name="prize"></param>
        /// <param name="bouns"></param>
        public PM(string name,float basePay,float prize,float bouns)
        {
            this.Name = name;
            this.BasePay = basePay;
            this.Prize = prize;
            this.Bouns = bouns;
        }


        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get; set; }
        /// <summary>
        /// 项目管理经验年限
        /// </summary>
        public int ManageYear { get; set; }

        /// <summary>
        /// 基本工资
        /// </summary>
        public float BasePay { get; set; }
        /// <summary>
        /// 项目奖金
        /// </summary>
        public float Prize { get; set; }
        /// <summary>
        /// 分红
        /// </summary>
        public float Bouns { get; set; }

        /// <summary>
        /// 项目经理打招呼
        /// </summary>
        public void SayHi()
        {
            Console.WriteLine($"大家好!我是{this.Name},今年{this.Age}岁,项目管理经验{this.ManageYear}年");
        }
    }
}
//创建一个静态结算类
namespace demo13_2
{
    static class CompSalary
    {
        /// <summary>
        ///支付工资(项目经理)
        /// </summary>
        /// <param name="pm"></param>
        public static float Pay(PM pm)
        {
            return pm.BasePay + pm.Prize + pm.Bouns;
        }
        /// <summary>
        /// 支付工资(程序员)
        /// </summary>
        /// <param name="se"></param>
        public static float Pay(SE se)
        {
            return se.BasePay + se.MeritPay;
        }
    }
}

【注】静态类中必须全是静态成员,否则会报错

//在main()方法中调用
namespace demo13_2
{
    class Program
    {
        static void Main(string[] args)
        {
            SE se1 = new SE("lily", 21, 99, 1001);
            se1.SayHi();
            se1.SayHi("弹钢琴");

            //简单方法的多态实现

            //CompSalary compSalary = new CompSalary();//由于类CompSalary是静态类,所以不需要重新创建对象
            SE se2 = new SE("mary", 5000, 2000);
            float money1 = CompSalary.Pay(se2);
            Console.WriteLine($"程序员{se2.Name}的工资结算为{money1}");

            PM pm1 = new PM("john", 5000, 3000, 4000);
            Console.WriteLine($"项目经理{pm1.Name}的工资结算为{CompSalary.Pay(pm1)}");

            Console.Read();
        }
    }
}

 结果为:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值