二十、c#中面向对象的编程(OOP)——类的无参方法

1.案例一:

从键盘接收三门课分数,计算三门课的平均分和总成绩,编写成绩计算类实现功能

namespace demo4
{
    /// <summary>
    /// 计算成绩类:包括java、csharp、db
    /// </summary>
    public class ScoreCalc
    {
        //静态特征(成员变量)
        public int java;
        public int csharp;
        public int db;
        
        //动态特征(行为)
        /// <summary>
        /// 统计总分
        /// </summary>
        /// <returns></returns>
        public int CalcTotalScore()
        {
            int total = java + csharp + db;
            return total;
        }
        /// <summary>
        /// 显示总分
        /// </summary>
        public void ShowTotalScore()
        {
            int sum = CalcTotalScore();
            Console.WriteLine($"总成绩为:{sum}");
        }
        /// <summary>
        /// 计算平均成绩
        /// </summary>
        /// <returns></returns>
        public int CalcAvg()
        {
            int avgscore = (java + csharp + db) / 3;//这里如果写成 CalcTotalScore()/3 也是可以的,但是耦合度高,不推荐
            return avgscore;
        }
        /// <summary>
        /// 显示平均成绩
        /// </summary>
        public void ShowCalcAvg()
        {
            int avg = CalcAvg();
            Console.WriteLine($"平均成绩为:{avg}");
        }
    }
}
namespace demo4
{
    class Program
    {
        static void Main(string[] args)
        {
            ScoreCalc scoreCalc = new ScoreCalc();//创建类的对象
            
            Console.WriteLine("请输入你的Csharp成绩:");
            scoreCalc.csharp = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入你的Java成绩:");
            scoreCalc.java = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入你的db成绩:");
            scoreCalc.db = int.Parse(Console.ReadLine());

            //ScoreCalc 抽象的   scoreCalc 内存中具体存在的数据结构
            scoreCalc.CalcTotalScore();//统计总成绩
            scoreCalc.ShowTotalScore();//显示总成绩
            scoreCalc.CalcAvg();//统计平均成绩
            scoreCalc.ShowCalcAvg();//显示平均成绩
        }
    }
}

 

2.内存分配

【堆】全称托管堆,使用灵活,使用的空间大,自适应长度(理论上无限大)

【栈】系统默认类型、读取数据快

【GC】垃圾回收机制

【值类型】int、char、double、float、struct、enum

在栈中存放值(有固定的字节)

【引用类型】string、class(类)、interface(接口)、Array(数组)

在堆中存放

 

3.成员变量(全局变量、字段)

特点:在虚拟内存中,分配了一块空间,存放值,

           生命周期一直持续,也就是说一直占用着内存

作用域:在整个类中均可使用

 

4.局部变量

作用域:只能够在方法中使用,还可以再缩小

特点:方法在使用过后,局部变量就释放掉了

 

【注1】就近原则:

假如局部变量和全局变量重名,那么选择的是作用范围较近的

也就是说,作用范围越小的,优先级越高

【注2】成员变量int |  string不赋值,默认值为0  |  Null,即成员变量可以不赋值

但是局部变量必须要手动的赋值,否则无法使用

 

5.案例二:

创建手机类、电池类;

手机类中需要定义的属性有:品牌;方法要实现:下载音乐、播放音乐、充电等功能

电池类中需要定义的方法:充电功能

//创建手机类
namespace demo4_2
{
    public class Phone
    {
        public string brand;//品牌
        /// <summary>
        /// 下载功能
        /// </summary>
        /// <returns></returns>
        public string DownLoadMusic()
        {
            //下载的代码
            string musicname = "起风了";
            return musicname;
        }
        /// <summary>
        /// 播放音乐功能
        /// </summary>
        public void PlayMusic()
        {
            //先下载
            string music = DownLoadMusic();
            //再播放
            Console.WriteLine($"{brand}品牌的手机正在播放音乐{music}");
        }
        /// <summary>
        /// 充电功能(属于手机)
        /// </summary>
        public void ChargeCell()//功能接口:一个个小功能件组装成了一个手机
        {
            Cell cell = new Cell();//创建电池
            cell.GetPower();
        }       
    }
}
//创建电池类
namespace demo4_2
{
    public class Cell
    {
        public void GetPower()
        {
            //电池功能
            Console.WriteLine("电池正在充电...");
        }
    }
}
//在main()方法中调用类
namespace demo4_2
{
    class Program
    {
        static void Main(string[] args)
        {
            Phone phone = new Phone();
            phone.brand = "华为";
            //phone.PlayMusic();
            string musicname = phone.DownLoadMusic();
            Console.WriteLine($"下载的歌曲名为:{musicname}");
        }
    }
}

【注】注意手机与电池的关系

实际上,充电时电池的功能,由于电池是手机的组装零件,因此在手机类中,“充电”功能只需要调用一下电池的充电功能即可

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值