当前位置: 首页 > news >正文

【05】C#入门到精通——C# 面向对象、类、静态变量static、类与类之间的调用

文章目录

  • 1 引入例子
  • 2 创建类
    • 2.1 类的访问属性
    • 2.2 英雄 特点类
    • 2.3 英雄信息打印
  • 3 静态变量static
  • 4 类 调用 类
    • 4.1 非静态 成员函数
    • 4.2 静态 成员函数

1 引入例子

比如游戏中 描述英雄的角色,

我们可以像下面这样,给每一个英雄特点及拥有技能分别定义变量;
(看起来有多又杂,还容易西出错)

using System;
//类型
//关键字
class Program
{static void Main(){Console.WriteLine("月黑风高杀人夜");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();Console.WriteLine("微风吹动着路边的小草");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();Console.WriteLine("隐约在路的尽头有一个人影");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();Console.WriteLine("走近一看,这人叫"); string name1 = Console.ReadLine();Console.WriteLine("原来你就是"+ name1);Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();string xingbie1 = "男";int nianling1 = 18;int shanghai1 = 100;int xueliang1 = 100;int shengao1 = 175;string jineng1 = "飞檐走壁"; int jineng1shanghai = 20;string jineng2 = "飞沙走右";int jineng2shanghai = 30;Console.WriteLine("性别: " + xingbie1);Console.WriteLine("年龄: " + nianling1);Console.WriteLine("基础伤害: " + shanghai1);Console.WriteLine("基础血量: " + xueliang1);Console.WriteLine("身高:" + shengao1);Console.WriteLine("技能1:" + jineng1);Console.WriteLine("技能1伤害: " + jineng1shanghai);Console.WriteLine("技能2:" + jineng2);Console.WriteLine("技能2伤害: " + jineng2shanghai);Console.ReadKey();Console.WriteLine("此时远处传来一个女人的声音");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("走进一看原来是: ");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("请输入女侠的名称: ");string name11 = Console.ReadLine();Console.WriteLine("原来你就是" + name11);Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();string xingbie11 = "女";int nianling11 = 18;int shanghai11 = 100;int xueliang11 = 100;int shengao11 = 165;string jineng11 = "飞檐走壁2.0";int jineng11shanghai = 40;string jineng22 = "飞沙走右2.0";int jineng22shanghai = 60;Console.WriteLine("性别: " + xingbie11);Console.WriteLine("年龄: " + nianling11);Console.WriteLine("基础伤害: " + shanghai11);Console.WriteLine("基础血量: " + xueliang11);Console.WriteLine("身高:" + shengao11);Console.WriteLine("技能1:" + jineng11);Console.WriteLine("技能1伤害: " + jineng11shanghai);Console.WriteLine("技能2:" + jineng22);Console.WriteLine("技能2伤害: " + jineng22shanghai);Console.ReadKey();}
}

在这里插入图片描述

2 创建类

创建一个Hero类

2.1 类的访问属性

class Hero
{string name;string xingbie;int nianling;int shanghai;int xueliang;int shengao;string jineng1;int jineng1shanghai;string jineng2;int jineng2shanghai;
}

实例化 对象,hr,但是hr.访问不到 类变量,因为 class默认是 private
在这里插入图片描述
如果像 C++那样写 就会报错;
在这里插入图片描述

2.2 英雄 特点类

class Hero
{public string name;public string xingbie;public int nianling;public int shanghai;public int xueliang;public int shengao;public string jineng1;public int jineng1shanghai;public string jineng2;public int jineng2shanghai;
}

完整代码

using System;
//类型
//关键字
class Program
{static void Main(){Console.WriteLine("月黑风高杀人夜");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();Console.WriteLine("微风吹动着路边的小草");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();Console.WriteLine("隐约在路的尽头有一个人影");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();Console.WriteLine("走近一看,这人叫");//实例化Hero hr1 = new Hero();hr1.name = Console.ReadLine();Console.WriteLine("原来你就是"+ hr1.name);Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();hr1.xingbie = "男";hr1.nianling = 18;hr1.shanghai = 100;hr1.xueliang = 100;hr1.shengao = 175;hr1.jineng1 = "飞檐走壁";hr1.jineng1shanghai = 20;hr1.jineng2 = "飞沙走右";hr1.jineng2shanghai = 30;Console.WriteLine("性别: " + hr1.xingbie);Console.WriteLine("年龄: " + hr1.nianling);Console.WriteLine("基础伤害: " + hr1.shanghai);Console.WriteLine("基础血量: " + hr1.xueliang);Console.WriteLine("身高:" + hr1.shengao);Console.WriteLine("技能1:" + hr1.jineng1);Console.WriteLine("技能1伤害: " + hr1.jineng1shanghai);Console.WriteLine("技能2:" + hr1.jineng2);Console.WriteLine("技能2伤害: " + hr1.jineng2shanghai);Console.ReadKey();Console.WriteLine("此时远处传来一个女人的声音");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("走进一看原来是: ");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("请输入女侠的名称: ");//实例化Hero hr2 = new Hero();hr2.name = Console.ReadLine();Console.WriteLine("原来你就是" + hr2.name);Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();hr2.xingbie = "女";hr2.nianling = 18;hr2.shanghai= 100;hr2.xueliang = 100;hr2.shengao = 165;hr2.jineng1 = "飞檐走壁2.0";hr2.jineng1shanghai = 40;hr2.jineng2 = "飞沙走右2.0";hr2.jineng2shanghai = 60;Console.WriteLine("性别: " + hr2.xingbie);Console.WriteLine("年龄: " + hr2.nianling);Console.WriteLine("基础伤害: " + hr2.shanghai);Console.WriteLine("基础血量: " + hr2.xueliang);Console.WriteLine("身高:" + hr2.shengao);Console.WriteLine("技能1:" + hr2.jineng1);Console.WriteLine("技能1伤害: " + hr2.jineng1shanghai);Console.WriteLine("技能2:" + hr2.jineng2);Console.WriteLine("技能2伤害: " + hr2.jineng2shanghai);Console.ReadKey();}
}class Hero
{public string name;public string xingbie;public int nianling;public int shanghai;public int xueliang;public int shengao;public string jineng1;public int jineng1shanghai;public string jineng2;public int jineng2shanghai;
}

在这里插入图片描述

2.3 英雄信息打印

将输出 打印信息,封装到类里面

class Hero
{//成员变量public string name;public string xingbie;public int nianling;public int shanghai;public int xueliang;public int shengao;public string jineng1;public int jineng1shanghai;public string jineng2;public int jineng2shanghai;//成员函数public void ShowInfo(){Console.WriteLine("性别: " + xingbie);Console.WriteLine("年龄: " + nianling);Console.WriteLine("基础伤害: " + shanghai);Console.WriteLine("基础血量: " + xueliang);Console.WriteLine("身高:" + shengao);Console.WriteLine("技能1:" + jineng1);Console.WriteLine("技能1伤害: " + jineng1shanghai);Console.WriteLine("技能2:" + jineng2);Console.WriteLine("技能2伤害: " + jineng2shanghai);}
}

完整代码

using System;
//类型
//关键字
class Program
{static void Main(){Console.WriteLine("月黑风高杀人夜");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();Console.WriteLine("微风吹动着路边的小草");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();////----------英雄一---------------------/////Console.WriteLine("隐约在路的尽头有一个人影");Console.WriteLine("(请按任意键继续。。。)"); Console.ReadKey();Console.WriteLine("走近一看,这人叫");//实例化Hero hr1 = new Hero();hr1.name = Console.ReadLine();Console.WriteLine("原来你就是"+ hr1.name);Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();hr1.xingbie = "男";hr1.nianling = 18;hr1.shanghai = 100;hr1.xueliang = 100;hr1.shengao = 175;hr1.jineng1 = "飞檐走壁";hr1.jineng1shanghai = 20;hr1.jineng2 = "飞沙走右";hr1.jineng2shanghai = 30;//打印英雄信息hr1.ShowInfo();Console.ReadKey();////----------英雄二---------------------/////Console.WriteLine("此时远处传来一个女人的声音");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("走进一看原来是: ");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("请输入女侠的名称: ");//实例化Hero hr2 = new Hero();hr2.name = Console.ReadLine();Console.WriteLine("原来你就是" + hr2.name);Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();hr2.xingbie = "女";hr2.nianling = 18;hr2.shanghai= 100;hr2.xueliang = 100;hr2.shengao = 165;hr2.jineng1 = "飞檐走壁2.0";hr2.jineng1shanghai = 40;hr2.jineng2 = "飞沙走右2.0";hr2.jineng2shanghai = 60;//打印英雄信息hr2.ShowInfo();Console.ReadKey();}
}class Hero
{//成员变量public string name;public string xingbie;public int nianling;public int shanghai;public int xueliang;public int shengao;public string jineng1;public int jineng1shanghai;public string jineng2;public int jineng2shanghai;//成员函数public void ShowInfo(){Console.WriteLine("性别: " + xingbie);Console.WriteLine("年龄: " + nianling);Console.WriteLine("基础伤害: " + shanghai);Console.WriteLine("基础血量: " + xueliang);Console.WriteLine("身高:" + shengao);Console.WriteLine("技能1:" + jineng1);Console.WriteLine("技能1伤害: " + jineng1shanghai);Console.WriteLine("技能2:" + jineng2);Console.WriteLine("技能2伤害: " + jineng2shanghai);}
}

在这里插入图片描述

3 静态变量static

  • static变量可以直接被 Hero.调用,
  • 而非静态变量,需要实例化之后才可以调用
class Hero
{//static变量可以直接被 Hero.调用,而不用实例化static public string str1 = "月黑风高杀人夜";static public string str2 = "请按任意键继续。。。";public string name;//static函数只能访问static变量;static public void fun(){Console.WriteLine(str1);Console.WriteLine(str2);//Console.WriteLine(name);//非静态变量  报错}
}    

在这里插入图片描述
//static变量可以直接被 Hero.调用,而不用实例化
在这里插入图片描述

using System;
//类型
//关键字
class Program
{static void Main(){Hero.str1 = "微风吹动着路边的小草";Hero.str2 = "隐约在路的尽头有一个人影";Hero.fun();}
}class Hero
{//static变量可以直接被 Hero.调用,而不用实例化static public string str1 = "月黑风高杀人夜";static public string str2 = "请按任意键继续。。。";public string name;//static函数只能访问static变量;static public void fun(){Console.WriteLine(str1);Console.WriteLine(str2);//Console.WriteLine(name);//非静态变量  报错}
}

4 类 调用 类

ShowInfo可以单独写一个类,Hero类ShowInfo类 分开;

将Hero类作为参数传给 ShowInfo类的成员函数,以便于打印信息,

class Hero
{//成员变量public string name;public string xingbie;public int nianling;public int shanghai;public int xueliang;public int shengao;public string jineng1;public int jineng1shanghai;public string jineng2;public int jineng2shanghai;
}

4.1 非静态 成员函数

将Hero类作为参数传给 ShowInfo类的成员函数,以便于打印信息,

class ShowInfo
{
//将Hero类,作为参数传给 ShowInfo类的成员函数,以便于打印信息,public void ShowHeroInfo(Hero hero){Console.WriteLine("性别: " + hero.xingbie);Console.WriteLine("年龄: " + hero.nianling);Console.WriteLine("基础伤害: " + hero.shanghai);Console.WriteLine("基础血量: " + hero.xueliang);Console.WriteLine("身高:" + hero.shengao);Console.WriteLine("技能1:" + hero.jineng1);Console.WriteLine("技能1伤害: " + hero.jineng1shanghai);Console.WriteLine("技能2:" + hero.jineng2);Console.WriteLine("技能2伤害: " + hero.jineng2shanghai);}
}

在这里插入图片描述

     //打印英雄信息ShowInfo show = new ShowInfo();show.ShowHeroInfo(hr1);

在这里插入图片描述

4.2 静态 成员函数

因为 Hero类涉及不同 英雄,实例化不同对象,需要使用非静态成员;
而ShowInfo只是显示信息,不需要区别对待,故而可以用 静态成员函数直接调用

class ShowInfo
{//将Hero类,作为参数传给 ShowInfo类的成员函数,以便于打印信息,public static void ShowHeroInfo(Hero hero){Console.WriteLine("性别: " + hero.xingbie);Console.WriteLine("年龄: " + hero.nianling);Console.WriteLine("基础伤害: " + hero.shanghai);Console.WriteLine("基础血量: " + hero.xueliang);Console.WriteLine("身高:" + hero.shengao);Console.WriteLine("技能1:" + hero.jineng1);Console.WriteLine("技能1伤害: " + hero.jineng1shanghai);Console.WriteLine("技能2:" + hero.jineng2);Console.WriteLine("技能2伤害: " + hero.jineng2shanghai);}
}

当 成员函数 ShowHeroInfo(Hero hero)改为 静态后,调用处出错(需要做相应修改)
在这里插入图片描述

        //打印英雄信息ShowInfo.ShowHeroInfo(hr1);

在这里插入图片描述
完整代码

using System;
//类型
//关键字
class Program
{static void Main(){Console.WriteLine("月黑风高杀人夜");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("微风吹动着路边的小草");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();////----------英雄一---------------------/////Console.WriteLine("隐约在路的尽头有一个人影");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("走近一看,这人叫");//实例化Hero hr1 = new Hero();hr1.name = Console.ReadLine();Console.WriteLine("原来你就是" + hr1.name);Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();hr1.xingbie = "男";hr1.nianling = 18;hr1.shanghai = 100;hr1.xueliang = 100;hr1.shengao = 175;hr1.jineng1 = "飞檐走壁";hr1.jineng1shanghai = 20;hr1.jineng2 = "飞沙走右";hr1.jineng2shanghai = 30;//打印英雄信息ShowInfo.ShowHeroInfo(hr1);Console.ReadKey();////----------英雄二---------------------/////Console.WriteLine("此时远处传来一个女人的声音");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("走进一看原来是: ");Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();Console.WriteLine("请输入女侠的名称: ");//实例化Hero hr2 = new Hero();hr2.name = Console.ReadLine();Console.WriteLine("原来你就是" + hr2.name);Console.WriteLine("(请按任意键继续。。。)");Console.ReadKey();hr2.xingbie = "女";hr2.nianling = 18;hr2.shanghai = 100;hr2.xueliang = 100;hr2.shengao = 165;hr2.jineng1 = "飞檐走壁2.0";hr2.jineng1shanghai = 40;hr2.jineng2 = "飞沙走右2.0";hr2.jineng2shanghai = 60;//打印英雄信息ShowInfo.ShowHeroInfo(hr2);Console.ReadKey();}
}class Hero
{//成员变量public string name;public string xingbie;public int nianling;public int shanghai;public int xueliang;public int shengao;public string jineng1;public int jineng1shanghai;public string jineng2;public int jineng2shanghai;
}
class ShowInfo
{//将Hero类,作为参数传给 ShowInfo类的成员函数,以便于打印信息,public static void ShowHeroInfo(Hero hero){Console.WriteLine("性别: " + hero.xingbie);Console.WriteLine("年龄: " + hero.nianling);Console.WriteLine("基础伤害: " + hero.shanghai);Console.WriteLine("基础血量: " + hero.xueliang);Console.WriteLine("身高:" + hero.shengao);Console.WriteLine("技能1:" + hero.jineng1);Console.WriteLine("技能1伤害: " + hero.jineng1shanghai);Console.WriteLine("技能2:" + hero.jineng2);Console.WriteLine("技能2伤害: " + hero.jineng2shanghai);}
}
http://www.dtcms.com/a/298313.html

相关文章:

  • [SV]在 Verilog 中,对某个信号施加一个弱下拉,但又不能影响后续的正常驱动
  • CSS 盒子模型学习版的理解
  • 【论文阅读51】-CNN-LSTM-安全系数和失效概率预测
  • Multiscale Structure Guided Diffusion for Image Deblurring 论文阅读
  • 【论文阅读】-《GenAttack: Practical Black-box Attacks with Gradient-Free Optimization》
  • 零售收银系统开源代码全解析:连锁门店一体化解决方案(含POS+进销存+商城)
  • 深入理解 Linux 进程信号
  • Linux 桌面市场份额突破 5%:开源生态的里程碑与未来启示
  • [MMU]四级页表查找(table walk)的流程
  • 流式接口,断点续传解决方案及实现
  • 前端核心进阶:从原理到手写Promise、防抖节流与深拷贝
  • iOS 抓包工具有哪些?模块化功能解析与选型思路
  • 容器化环境下的服务器性能瓶颈与优化策略
  • ubuntu22.04.4锁定内核应对海光服务器升级内核无法启动问题
  • Qt Mysql linux驱动编译
  • Google AI Mode 解析:生成式搜索功能的核心机制与应用场景
  • PowerDesigner安装教程(附加安装包)PowerDesigner详细安装教程PowerDesigner 16.6 最新版安装教程
  • Nacos-服务注册,服务发现(一)
  • 【模型剪枝1】结构化剪枝论文学习笔记
  • 如何理解SpringBoot starters的自动装配
  • 地下隧道管廊结构健康监测系统 测点的布设及设备选型
  • 1 51单片机-C51语法
  • 4麦 360度定位
  • docker搭建ray集群
  • SAP-PP-MRPLIST
  • MybatisPlus-17.扩展功能-JSON处理器
  • 【57】MFC入门到精通——MFC 多线程编程总结
  • 【lucene】自定义tokenfilter 自带payload
  • String类常用方法练习
  • synchronized锁普通方法和锁静态方法有什么区别?