# 构造函数中对象的创建
构造函数用于对变量初始化
```
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 这个关键字来初始化
}
}
```
# 例如:想输出以下内容:

> 思路:
> 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 时,将被销毁。
# 类与对象的关系 类、对象

- 帮助文档 microsoft helo viewer
- c#开发环境及visual studio安装注意事项
- c#程序基本结构-基本语法
- Q1: public static void main(String[] args) 是什么意思
- Q2: c#命名空间+Main方法
- Q3:注释+命名规则+代码规则
- Q4: c#语句 system => console
- Q5: 数据类型 .net
- Q5: 常用名字、变量、运算符
- Q6: 对话窗输入-属性
- Q7: 递归
- Q8:决策分支、条件判断语句 if 语句
- Q9:数组
- Q10:字符串
- Q11:对象、类、访问权限、静态动态函数
- Q12:方法及参数——继承于类
- Q13:构造函数
- Q14:继承——base 关键字
- Q15:多态、虚方法、接口
- Q16:创建窗体应用、控件
- Q17:Ado数据访问、连接 sqlserver 数据库
- Q18: 读取数据command + DataRead( )、DataSet + DateAdapter
- Q19: Entity Framwork、entity 与 ADO.net的区别
- Q20: 对话框、文件、文件夹
- Q21: 导入excel数据、更新到 dbo 数据库中
- Q26: 获取 excel 中每个 sheet 的表名
- Q22: 两个窗体之间数据+方法传递
- Q23: 数学对象
- Q24: c#网站编写
- Q25: visual studio2017如何查看帮助
- Q27: c# dictionary 字典对象
- Q28: 数组与dataTable互相转化