类是现实事物抽象后的属性集(模型)

  • 类是对现实世界事物进行抽象所得到的结果

    • 事物包括“物质”(实体)与“运动”(逻辑)
    • 建模是一个去伪存真、由表及里的过程
    • 抽象建模,去除现象看逻辑本质
    • 唯物主义辩证法1541984087987-d0e059ff-58da-4254-80fa-612fa2218eff.png

      类与对象的关系

  • 对象也叫实例,是类经过 “包装”/“实例化” 后得到的内存中的实体

    • “飞机”与“一架飞机”有何区别?——“飞机”是一个概念也就是一个类,但是“一架飞机”是一个对象,也就是一个实例。“一架飞机”这个实体可以飞行,但是“飞机”这个概念是不能飞行的
    • 有些类是不能实例化的,比如“数学”(Math class),我们不能实例化“一个数学”
  • 依照类的特性,创建一个对象。这就是“实例化”
    • 现实世界中常称“对象”程序世界中常称“实例”

      使用 new 操作符创建类的实例

      ```csharp using System.Windows.Forms;

namespace ClassAndInstance { class Program { static void Main(string[] args) { (new Form()).ShowDialog(); //调用new实例的一个显示函数 } } }

  1. <a name="1nJUb"></a>
  2. ### 引用变量与实例的关系
  3. - **孩子**与**气球**
  4. - 气球不一定有孩子签着
  5. - 多个孩子可以使用各自的绳子牵着同一个气球,也可以都通过一根绳子牵着同一个气球,**一个孩子只能牵一个气球**<br />
  6. ```csharp
  7. using System.Windows.Forms;
  8. namespace ClassAndInstance
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. Form form = new Form(); //让你一个变量引用着new的实例
  15. form.Text = "My Form"; //修改变量(引用实例)的标题
  16. form.ShowDialog(); //将实例显示出来
  17. }
  18. }
  19. }

类的三大成员

  • 属性(Property)
    • 储存数据,所有的属性构成对象的特征,属性的当前数据构成实例的当前状态
  • 方法(Method)
    • 由C语言中的函数(function)进化而来,表示类或对象的功能。
    • 工作中90%的时间都是在与方法打交道,因为它是“真正做事”、“构成逻辑”的成员
  • 事件(Event)
    • 类或则对象通知其他类或对象的机制,为C#所特有(java使用其他方法也实现了类似的机制)
    • 善用事件机制非常重要
  • 熟练使用MSDN文档
  • 某些特殊类或对象在成员方面侧重点不同

    • 模型类或对象重在属性
      • 在搭建数据库连接时的数据模型类
    • 工具类或对象重在方法
      • 比如Math类,全都是方法没有属性
    • 通知类或对象重在事件

      动态时钟(WPF、利用通知类)

      前端:XAML

      1. <Window x:Class="EventSample.MainWindow"
      2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      4. Title="MainWindow" Height="350" Width="525">
      5. <Grid>
      6. <TextBox x:Name="TimeTextBox" HorizontalAlignment="Left" Height="66" Margin="135,42,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="253" RenderTransformOrigin="0.308,0.087" FontSize="20"/>
      7. </Grid>
      8. </Window>

      后端:C# ```csharp using System; using System.Windows; using System.Windows.Threading; //WPF的多线程处理器

namespace EventSample { public partial class MainWindow : Window { public MainWindow() { InitializeComponent();

  1. DispatcherTimer timer = new DispatcherTimer(); //实例化一个多线程定时器
  2. timer.Interval = TimeSpan.FromSeconds(1); //设置计算机时间刻度的间隔 = 时间间隔里的秒钟间隔(1)
  3. timer.Tick += timer_Tick; //新注册一个事件叫做timer_Tick,挂在时间溢出事件上
  4. timer.Start();
  5. }
  6. void timer_Tick(object sender, EventArgs e)
  7. {
  8. this.TimeTextBox.Text = DateTime.Now.ToString(); //将上一秒的事件转化成string型文本显示出来
  9. }
  10. }

}

  1. <a name="vXTKv"></a>
  2. ### 静态成员与实例成员
  3. - 静态(static)成员在语义上表示它是“类的成员”
  4. - MSDN文档中属性/方法/事件的下面有个S的图标这个属性/方法/事件就是静态的<br />
  5. - ![静态.png](https://cdn.nlark.com/yuque/0/2020/png/1488644/1590646552711-72c9b03a-4454-45b6-ba06-e933f48a0d83.png#align=left&display=inline&height=88&margin=%5Bobject%20Object%5D&name=%E9%9D%99%E6%80%81.png&originHeight=88&originWidth=709&size=10211&status=done&style=none&width=709)
  6. - ![静态方法.png](https://cdn.nlark.com/yuque/0/2020/png/1488644/1590646567506-320027fe-5787-460f-b8b1-b7143d4f1c98.png#align=left&display=inline&height=85&margin=%5Bobject%20Object%5D&name=%E9%9D%99%E6%80%81%E6%96%B9%E6%B3%95.png&originHeight=85&originWidth=538&size=10669&status=done&style=none&width=538)
  7. - 实例(非静态)成员在语义表示它是“对象的成员”
  8. ```csharp
  9. using System;
  10. using System.Windows.Forms;
  11. namespace StaticSample
  12. {
  13. class Program
  14. {
  15. static void Main(string[] args)
  16. {
  17. Console.WriteLine("静态调用"); //直接使用类的方法叫做静态调用
  18. Form form = new Form();
  19. form.Text = "非静态调用"; //调用对象(实例化)的方法叫做非静态调用
  20. form.ShowDialog();
  21. }
  22. }
  23. }
  • 绑定(Bingding)指的是编译器如果把一个成员与类或对象关联起来
    • “早绑定”:编译器在编译这个类的时候就已经知道这个成员是隶属于这个类或这个类的对象
    • “晚绑定”:编译器不管,由程序决定这个类的成员是隶属这个类或这个类的对象。
      • 这种编译语言叫做“动态语言”。例如:“JavaScript”
  • “.”成员访问操作符(静态动态都能用)