類(Class)的概念:
類是對現實世界事務進行抽象所得到的結果
抽象的過程就是對現實世界建模的過程。
在軟件世界裏,實體和邏輯構成了整個軟件系統
對象就是實例,是類經過實例化後得到的內存中的實體
舉例:飛機和一架飛機的區別。飛機是一個概念(類),一架飛機是概念抽象出來的實例(對象)。
有些類(class)是不能實例化的,例如 數學 (Math class)。不能說是一個數學。
實例化的概念:
依照這個類的模子,創造一個對象。
就像之前舉例的飛機,飛機是一個概念的東西,按照這個概念造一個飛機就是創造一個對象。
對象和實例的細微區別。
在討論現實世界中的主要是類和對象,比如:拿飛機這個類創建一個(一架飛機)對象
研究程序世界的邏輯,特別是內存的關係。常用的就是類與實例。
如何實例化呢?
在C#中是用new操作符來創建實例的。
舉例:
Form是微軟自己從現實世界中抽象的一個類,放在了System.Windows.Forms裏。
由於Form這個類(概念)自己是沒法顯示的,需要實例。
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
(new Form()).ShowDialog();
}
}
}
這樣就實例化了一個對象Form並顯示出來。
引用變量和實例的關係
爲什麼會有引用變量這個概念?
如果我們想改Form的擡頭,並且讓其顯示。我們用單純實例化的方法做不到。
例如下面的例子,我們其實是實例化了兩個Form,並不能實例化一個Form並對其進行多種操作
(new Form()).Text = "Hello";
(new Form()).ShowDialog();
引用變量就可以很好的解決這個問題。
Form myForm;//創造一個Form的引用變量
myForm = new Form(); //實例交給引用變量
myForm.Text = "Hello";//
myForm.ShowDialog();
引用變量和實例的關係
孩子氣球。
孩子相當於引用變量,氣球相當於實例
Form myform 相當於聲明瞭一個孩子
new Form() 相當於聲明瞭一個氣球
=作爲連接孩子和氣球的繩子
如果不連上會被當成垃圾地址回收掉。
並且不同的孩子可以通過不同的繩子綁住一個氣球
下面的的例子可以解釋這一現象
Form myForm1;//創造一個Form的引用變量
Form myForm2;
myForm1 = new Form(); //實例交給引用變量
myForm2 = myForm1;
myForm1.Text = "Hello";//
myForm2.ShowDialog();
最終myForm2的窗體上的text是Hello,因爲我們通過myForm1來改變了實例。
類的三大成員
屬性
兩個功能
- 存儲數據:eg飛機的高度以及速度
- 表示當前類的狀態:根據數據來判斷飛機的起飛降落狀態
方法
- 能幹什麼。真正做事的
- 算法
事件
- 類或者對象通知其他類或者對象的機制
- C#特有。
- 善用事件機制非常重要
善用MSDN文檔
例子1:以屬性爲側重的類
利用EntityFramework(N個DLL包組成的用來完成特定功能的package)
學到後面來補充這個例子。
例子2:以方法爲側重的類
Math
例子3:以事件爲側重的類
時鐘的例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace WpfClock
{
/// <summary>
/// MainWindow.xaml 的交互邏輯
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer(); //實例化一個計時器的類
timer.Interval = TimeSpan.FromSeconds(1); //設定間隔時間
timer.Tick += Timer_Tick; //綁定timer_tick事件,每隔一秒獲取現在的時間
timer.Start(); //計時器開始
}
private void Timer_Tick(object sender, EventArgs e)
{
timeTextBox.Text = DateTime.Now.ToString();
}
}
}
靜態成員和實例成員
靜態成員:成員隸屬於類,類與生俱來的成員。舉例:human class 成員有 總數,增長 。但,不能說具體某個人的總數,增長。
實例成員:所有非靜態的成員,成員屬於某個對象的。 例如: 人 ,身高、體重
反映在靜態成員上應該是平均身高,平均體重
下面例子可以解釋:
綁定:編譯器如何把一個成員與類或對象關聯起來
解釋:成員有的是和類關聯的,有的是和類的對象關聯的。綁定就是做這個的,來決定什麼和類關聯,什麼和類的實例化對象關聯。
早綁定:編譯器編譯類的時候,就已經知道這個成員到底隸屬於類還是對象
晚綁定,編譯器不管,直到程序運行時才由程序決定隸屬於類還是對象
.操作符
成員訪問操作符