1、类(class):现实世界实物的模型

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

  • 事物包括物质(实体)与运动(逻辑)
  • 建模是一个去伪存真,由表及里的过程

以飞机与飞行员举例 image.png 将飞机于飞行员抽象为类,其中有各自的方法,而飞行员又依赖于飞机。

2、类与对象的关系

(1)对象也叫实例,是类经过“实例化”后得到的内存中的实体

(2)依照类可以创建对象,这就是“实例化”

  • 现实世界中常称“对象”,程序世界中常称“实例”
  • 对象与实例并无太大差别,常常混用,初学者不必迷惑

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

首先添加windows.form类库 image.png

代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;




namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            (new Form()).ShowDialog();
        }
    }
}

运行结果 image.png

(4)引用变量与实例的关系

在上例中如果我们想给窗口附上一个名字,可能会想到如下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;




namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            (new Form()).Text="My Form";
            (new Form()).ShowDialog();
        }
    }
}

但运行出来后并没有名字,是因为显示出来的是一个新的窗口,并不是之前赋名字的窗口.这种情况下就需要用到引用变量.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;




namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Form myform;
            myform = new Form();
            myform.Text = "My Form";
            myform.ShowDialog();
        }
    }
}

运行结果 image.png

这里的myform就属于一个引用变量,可多次使用.

  • 引用变量与实例就相当于孩子与气球 (1)气球不一定有孩子牵着 (2)多个孩子可以使用各自的绳子牵着同一个气球,也可以通过同一根绳子牵着气球
namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Form myform1;
            Form myform2;
            myform1 = new Form();
            myform2 = myform1;
            myform1.Text = "My Form";
            myform2.ShowDialog();
        }
    }
}

同一根绳子牵着气球的情况会在之后的Ref讲到

3、类的三大成员

(1)属性(property)

  • 存储数据,组合起来表示类或对象当前的状态

(2)方法(method)

  • 由c语言中的函数(function)进化而来,表示类或对象"能干什么"
  • 工作中90%的时间是在与方法打交道,因为他是"真正做事,构成逻辑"的成员

(3)事件(event)

  • 类或对象通知其他类或对象的机制,为c#所特有
  • 善用事件机制非常重要

(4)某些特殊类或对象在成员方面侧重点不同

  • 模型类或对象重在属性,如Entity Framework
  • 工具类过对象重在方法,如Math,Console
  • 通知类或对象重在事件,如各种Timer

4、静态成员和实例成员

  • 静态(static)成员在语义上表示它是"类的成员" 比如人类的总数,削减,增加;而不能说具体一个人的总数

  • 实例(非静态)成员在语义上表示它是"对象的成员"

  • 绑定(binding)指的是编译器如何把一个成员与类或对象关联起来 .成员访问操作符