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

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

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

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
【05】C#入门到精通——C# 面向对象、类、静态变量static、类与类之间的调用
如果像 C++那样写 就会报错;
【05】C#入门到精通——C# 面向对象、类、静态变量static、类与类之间的调用

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

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

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

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

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);//非静态变量 报错 }} 

【05】C#入门到精通——C# 面向对象、类、静态变量static、类与类之间的调用
//static变量可以直接被 Hero.调用,而不用实例化
【05】C#入门到精通——C# 面向对象、类、静态变量static、类与类之间的调用

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

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

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

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

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)改为 静态后,调用处出错(需要做相应修改)
【05】C#入门到精通——C# 面向对象、类、静态变量static、类与类之间的调用

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

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

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