一、类
类是对现实世界事物进行抽象所得到的结果
事物包括“物质”(实体)与“运动”(逻辑)
建模是一个去伪存真、由表及里的过程
去伪存真:在抽象过程中,去掉程序不需要的,留下需要的内容
由表及里:表——与外界打交道的界面、接口,里——内部封装的东西
右边这个箭头代表:飞行员依赖于飞机
(这在软考中也学过)
老师建议再去翻一翻辩证唯物主义原理
二、类与对象的关系
对象也叫实例,是类经过“实例化”后得到的内存中的实体
Formally "instance" is synonymous with "object" —— 对象和实例是一回事
“飞机”与“一架飞机”有何区别?天上有(一架)飞机——必须是实例飞,概念是不能飞的
有些类是不能实例化的,比如“数学”(Math class),我们不能说“一个数学”
依照类,我们可以创建对象,这就是“实例化”
现实世界中常称“对象”,程序世界中常称“实例”
二者并无太大区别,常常混用,初学者不必迷惑
使用new操作符创建类的实例
例如:类Form(表单的意思)创建实例(实例化):
new操作符+ 类名 = 把这个类实例化了
new Form();
两个圆括号代表:当表单的实例在内存中诞生后,你用什么样的方法对它进行初始化。这个叫做构造器。
;的意思:这句话表达完了
(new Form()).ShowDialog();
把new Form() 这句用圆括号括起来,然后加. (这个句号指的是调用它的一个方法)
运行一下
表格就出来了
下一个概念:引用变量
Form myForm;
myForm = new Form();
myForm.Text = "My Form!";
myForm.ShowDialog();
这样就声明了一个引用变量,然后我们用这个引用变量来引用一个实例。
=这里是赋值操作符,意思是把new Form()出来的实例,交给myForm引用变量
这样标题栏的内容就show出来了
通过引用变量引用实例,我们就可以多次访问这个实例。如果没有这样操作,直接写newForm,系统会新开一个Form,跟之前的就没有关系了。
引用变量与实例的关系
小朋友 —— 引用变量
气球 —— 实例
气球不一定有小朋友牵着
如果创建了气球,没有小朋友牵着,那么就飞走了,被内存垃圾回收器给收走了。
多个小朋友可以使用各自的绳子牵着同一个气球(如下图),也可以都通过一根绳子牵着气球(后面讲,ref 修饰符(C#入门经典函数中有讲解))
例如:
运行起来,myForm2表头是“My Form”
三、类的三大成员
编程就是数据+算法,也就是下面的属性+逻辑
属性(Property)
图标样式:
作用:存储数据,组合起来表示类或对象当前的状态
例如飞机,数据:
高度:0m
速度:0m/s
这样就得出飞机的状态:静止
方法(Method)
图标样式:
由C语言中的函数(function)进化而来,表示类或对象“能做什么”
工作中90%的时间是在与方法打交道,因为它是“真正做事”、“构成逻辑(也叫算法)”的成员
事件(Event)
图标样式:
类或对象通知其他类或对象的机制,为C#所特有(Java通过其他办法实现这个机制)
善用事件机制非常重要(不要滥用事件)
使用MSDN文档
用很多文字来解释这个类:
某些特殊类或对象在成员方面侧重点不同
模型类或对象重在属性,如Entity Framework
工具类或对象重在方法,如Math,Console
通知类或对象重在事件,如各种Timer
1、属性——模型示例:Entity Framework
小Tips:①
②cw按两下变成Console.WriteLine( );
要先安装NuGet里的EntityFramework
再安装数据库,接下来就可以编程:
2、方法——工具示例 Math
double x = Math.Pow(2,3);
Console.WriteLine(x);
3、事件——通知示例Timer
建立WPF程序
建立Textbox
再去后台代码
编写以下代码:
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 EventSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();//创建DispatcherTimer这个类的引用变量
//也就是实例化 小朋友拿气球了;引用变量=实例
timer.Interval = TimeSpan.FromSeconds(1); //用多长的时间来生成TimeSpan 时间间隔
timer.Tick += Timer_Tick; //用+=这个操作符,把后面缩写的这个函数,挂接到这个事件上
//这个事件如果发生,那么就会执行下面的方法(也叫函数)
//我们用这个方法来响应我们的事件,所以这个方法也叫事件处理器
timer.Start(); //方法调用 加上上面两行依次为属性值、事件挂接器、方法调用
//一个类如果想要work的话,属性、方法、事件同时组合起来
//timer这个类重在事件
}
private void Timer_Tick(object? sender, EventArgs e)
{
this.TimeTextBox.Text = DateTime.Now.ToString();
}
}
}
得到一个时钟:
上面内容老师说上面三个例子都要默写下来。过两天再写一遍
四、静态成员与实例成员
静态(static)成员在语义上表示它是“类的成员”;老师说隶属于类。就是冬天摸铁的东西有静电,这个静就是静态的静。就是物体固有的性质。静态就是指这个类与生俱来的。
例如人这个类,成员有人类数量、人类增长量
实例(非静态)成员在语义表示它是“对象的成员”
例如人,身高、体重。
如果是静态成员,就是平均身高、平均体重。这就是静态与实例成员的区别
案例:
form.Text 调用的实例方法
回到MSDN文档。如果某个属性有个红色大写S,那么就是静态的属性
静态方法:
静态事件比较少见
绑定(Binding)指的是编译器如何把一个成员与类或对象关联起来
当编写程序时,编译器知道什么时候把成员与类关联起来,还是成员与对象关联起来。
绑定分为早绑定、晚绑定。
早绑定:编译器编译这个类的时候,就已经知道这个成员是隶属于这个类,还是这个类的对象。
晚绑定:编译器不管这些,直到程序运行起来才决定,一个方法隶属于一个类还是那个对象。
不可小觑 “ . ” 操作符 —— 叫做:成员访问操作符
例如:
Console.WriteLine
类.静态成员
form.Text
实例.实例成员