类(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 成员有 总数,增长 。但,不能说具体某个人的总数,增长。
实例成员:所有非静态的成员,成员属于某个对象的。 例如: 人 ,身高、体重
反映在静态成员上应该是平均身高,平均体重
下面例子可以解释:
绑定:编译器如何把一个成员与类或对象关联起来
解释:成员有的是和类关联的,有的是和类的对象关联的。绑定就是做这个的,来决定什么和类关联,什么和类的实例化对象关联。
早绑定:编译器编译类的时候,就已经知道这个成员到底隶属于类还是对象
晚绑定,编译器不管,直到程序运行时才由程序决定隶属于类还是对象
.操作符
成员访问操作符