【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);}
}