企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# 构造函数中对象的创建 构造函数用于对变量初始化 ``` Program pro = new Program(); //使用new 关键字创建构造函数 ``` # 调用对象 如果在构造函数之前已经有定义变量,则使用`this.xxx`来初始化: ``` class Person { string name, action; public Person (string name, string action)//创建构造函数的参数,使之与已定义的name, action同名 { this.name = name; this.action = action; //因为 Person 构造函数中的两个变量与最开始时候定义的同名,此时用 this 这个关键字来初始化 } } ``` # 例如:想输出以下内容: ![](https://ws4.sinaimg.cn/large/006tKfTcgy1frx2w7iiwuj30780ajaat.jpg) > 思路: > 1. 识别变量:题目中有不同人物,但对不同人物来说,都有姓名、动作、语言三个内容。所以设置三个变量string name、string actiongStr、string shoutStr分别表示三个部分。 > 2. 定义类:Person 类以及默认的 Program 类。Person 类:用来定义题目中人物需要的属性以及方法。Program 类:用来最终呈现在屏幕上或 console 控制台上。 > 3. 细化类中的属性及方法(如下)。 ## 1. Person 类: > 用来定义题目中人物需要的属性以及方法。 - 1.1 定义变量 => string name、string actionStr、string shoutStr - 1.2 属性 => 通过有参构造函数Person将上述定义的变量初始化,使用 this 关键字。 ``` class Person { string name, actionSrt, shoutStr; //以下为构造函数的属性设置 public Person(string name, string actionStr, string shoutStr) { this.name = name; this.actionStr = actionstr; this.shoutStr = shoutStr; } } ``` - 1.3 方法 => 通过方法设置(分别取名action以及shout)。方法可是是变量的组合,或者是对变量进行某种操作。 ``` class Person { …… public Person……(接上部分) //以下为方法的设置 public action() { console.writeline(name + actionStr); } public shout() { console.writeline(name + shoutStr); } } ``` ## 2. Program 类: > 用来最终呈现在屏幕上或 console 控制台上。 一般在这个 Program 中创建对象。注意要在 默认的Main 方法里面。 - 2.1 创建对象 => 创建上述题目中,曹操、赵云、张郃、张飞、张辽、关羽等人作为具体的对象。一旦创建以后,则这个对象(比如曹操caocao),即拥有了一定的属性,以及一定的动作,并且由于我们创建的是有参构造函数,所以在创建对象的时候需要直接赋值。 ``` class Person { …… } //(接上述内容) class Program { static void Main(string[] args) { Person caocao = new Person("曹操", "落荒而逃", "哈哈大笑"); Person zhaoyun = new Person("赵云", "拦住去路", "我是赵子龙,你哪里跑!"); Person zhangfei = new Person("张飞", "拦住去路", "我是张飞,你哪里跑!"); Person zhanghe = new Person("张颌", "上前救主", "我是张颌,莫动我主公!"); Person zhangliao = new Person("张辽", "上前救主", "我是张辽,莫动我主公!"); Person guanyu = new Person("关羽", "拦住去路", "长叹一声"); } } ``` - 2.2 开始写要呈现在console 控制台的内容了 => ``` class Person {……} class Prgram { static void Main() { ……(接上述内容) caocao.shout(); //括号一定要写。注意此时直接调用对象中的方法。会直接显示(姓名+说的话) zhaoyun.action(); zhaoyun.shout(); zhanghe.action(); zhanghe.shout(); caocao.action(); console.writeline();// 表示空一行,无其他意思 caocao.shout(); zhangfei.action(); zhangfei.shout(); zhangliao.action(); zhangliao.shout(); caocao.action(); console.writeline(); caocao.shout(); guanyu.action(); guanyu.shout(); console.readline(); } } ``` ## 完整代码如下: ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { public class Person { string name, actionStr, shoutStr;//定义三个字符串变量 //使用构造函数对上述三个变量进行初始化 public Person(string name, string actionStr, string shoutStr) { this.name = name; //人 this.actionStr = actionStr;//做的动作 this.shoutStr = shoutStr;//喊一下 } //创建方法。以下方法中,分别将上述定义的三个变量进行组合,得出不同的方法。 public void action()//也就是,执行了这个action动作以后, { Console.WriteLine(name + actionStr);//谁来执行拦截动作(人+动作) } public void shout() { Console.WriteLine(name + shoutStr);//谁来喊(人+喊) } public void escape() { Console.WriteLine(name + "落荒而逃"); } } public class Program { static void Main(string[] args) { //在该例子中,每一个对象的三个参数(name,actionStr,shoutStr)都是固定的。 Person caocao = new Person("曹操", "落荒而逃", "哈哈大笑"); //在Main方法里面创建有参对象,参数与Person中的参数个数一致,意思一致,类型一致 Person zhaoyun = new Person("赵云", "拦住去路", "我是赵子龙,你哪里跑!"); Person zhangfei = new Person("张飞", "拦住去路", "我是张飞,你哪里跑!"); Person zhanghe = new Person("张颌", "上前救主", "我是张颌,莫动我主公!"); Person zhangliao = new Person("张辽", "上前救主", "我是张辽,莫动我主公!"); Person guanyu = new Person("关羽", "拦住去路", "长叹一声"); Console.WriteLine("曹操赤壁失利,败走华容道"); caocao.shout(); //调用方法,则自动会根据上述方法定义中的不同变量进行组合及操作 Console.WriteLine(); zhaoyun.action(); //括号不能漏写,否则会提示错误 zhaoyun.shout(); zhanghe.action(); zhanghe.shout(); caocao.action(); Console.WriteLine(); caocao.shout(); zhangfei.action(); zhangfei.shout(); zhangliao.action(); zhangliao.shout(); caocao.action(); Console.WriteLine(); caocao.shout(); guanyu.action(); guanyu.shout(); caocao.action(); Console.ReadLine(); } } } ``` # 对象的销毁 对象的生命周期: 构造函数 => 逻辑操作 => 析构函数 两种销毁方式: 1、超出作用范围,将被销毁; 2、当对象被设置为 null 时,将被销毁。 # 类与对象的关系 类、对象 ![](https://ws4.sinaimg.cn/large/006tKfTcly1frx4cj68hbj30ec070js0.jpg)