# 構造函數中對象的創建
構造函數用于對變量初始化
```
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互相轉化