VS Code 新建上位机项目---C#面向对象编程
- 1 类与对象
- 1.1 类的构成
- 1.2 对象
- 2 类的属性
- 2.1 类的属性与类的字段
- 2.2 类属性的拓展
- 2.3 对象类型的属性
- 3 构造方法(初始化)
- 3.1 默认构造方法 无参数构造方法
- 3.2 有参数构造方法
- 3.3 构造方法相互调用( :this() )构造方法重载
- 3.4 对象初始化器
- 4 对象实例化方法
- 5 垃圾回收机制(GC)
- 6 静态方法(static)
- 7 params关键字
- 8 泛型集合
- 8.1 基于索引的泛型集合 LIst<T>
- 8.1.2 List<>的基本语法
- 8.1.2 将List<>作为对象容器
- 8.2 基于"键--值"对的泛型集合 Dictionary<k.v>
1 类与对象
1.1 类的构成
类通俗来讲,就是将目标对象进行分类。如何分类?
静态属性:是对象的基本特征信息。
动态方法:是描述对象能做什么,如何做。
类的规范:
访问修饰符 class 类的名称
{
//静态字段部分
//静态属性部分
//私有字段(一般不用)
//动态方法部分
}
一个类可以只有属性、只有方法、也可以属性、方法全部都有。不建议添加只有字段的类。
先新建一个空白项目,然后右键项目名称,添加,新建项,选择类,重新修改类名,点击添加;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Thinger.ConsoleAndOperation
{/// <summary>/// 设备类/// </summary>public class Equipment //访问修饰符 class 类的名称{public int EquipID { get; set; }//属性1:设备ID//输入prop连续Tab两次可以自动复制上一行的代码结构public int EquipName { get; set; }//属性2:获取设备名称public double Pressure { get; set; }//属性3:压力public DateTime Collecttime { get; set; }//属性4:获取更新时间public void ShowInfo()//属性5:方法 显示信息{Console.WriteLine($"设备ID:{EquipID}");}}
}
tips:
【1】访问修饰符
public class Equipment //访问修饰符 class 类的名称
访问修饰符不写的时候,默认访问修饰符是internal,表示只能再当前程序集内部使用该类。public可以再程序集外面通过调用命名空间的方式使用。类的名称首字母要大写。
【2】get与set是一个方法。主要执行过程是先将对象的值set给类,类里面通过get读取这个数然后执行语句,在对象的位置显示。所以说get与set是方法, public int EquipID才是属性。
public int EquipID { get; set; }//属性1:设备ID
找到路径下的ildasm.exe文件,双击运行,
右键程序集,选择再文件资源管理器中打开文件夹,C:\Users\wang\Desktop\Thinger.ConsoleAndOperation\Thinger.ConsoleAndOperation\bin\Debug,找到debug下面的.exe文件,将其直接拖到运行窗口ildasm.exe中,可以看到get与set的底层逻辑。查看完毕后,记得关闭ildasm.exe文件,否则会影响程序运行。
【3】类只是规定了,它能存储什么类型的数据、能够完成什么任务,但是没有具体的数据。类本身也是一种数据类型,有点像是西门子下位的UDT或者WINCC的结构体。他只有后缀,并不是一个完整的变量,因此需要对象来作为前缀,这样前缀+后缀就构成了一个完成的变量。所以想让类有具体的内容需要对象来进行填充。
1.2 对象
对象就是用类做模板,给类的属性赋值。
使用new关键字定义,会将类调到内存中,从而变成对象的实例。
类名 对象名 = new 类名();
对象名.属性 = 值;
对象名.方法(参数...);
回到progrpm.cs。
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;namespace Thinger.ConsoleAndOperation
{class Program{static void Main(string[] args){Equipment Equip = new Equipment();//根据类构建对象Equip.EquipID = 101;//给对象(Equip)的类(Equipment)中的属性(ID)赋值Equip.EquipName = "空气压缩机";//Equip.Pressure = 2.5;//下位机读取的数据Equip.Collecttime = Convert.ToDateTime("2025-2-24");//Equip.ShowInfo();//显示信息Equipment Equip2 = new Equipment();//根据类构建了一个对象Equip2.EquipID = 102;//给对象(Equip)的类(Equipment)中的属性(ID)赋值Equip2.EquipName = "空气压缩机";Equip2.Pressure = 2.6;//下位机读取的数据Equip2.Collecttime = Convert.ToDateTime("2025-2-24");Equip2.ShowInfo();//显示Console.ReadLine();//调用控制台} }
}
2 类的属性
2.1 类的属性与类的字段
【1】字段,又称为“成员变量”
第一、目的:字段是为类的内部方法,或者方法之间传递数据使用,强调对内使用。交修饰:字段一般用private修饰,很少用public。
第三、读写:字段可以读写均可,也可以用readonly限制为只读,但是不能添加业务。
【2】属性
第一、目的:属性是对外提供数据访问、本地不保数据,强调对外使
第二、修饰:属性都是public,从来不用private。
第三、读写:属性可以轻松的实现单独读写控制,并且可以添加任意需要的业务逻辑。
第四、强制:dgv列表必须强制使用属性,不能使用公有字段。
namespace Thinger.ConsoleAndOperation
{/// <summary>/// 设备信息类/// </summary>public class Equipment2{public int EquipID { get; set; } //属性可读可写,外部可以调用// public int EquipID;//公用字段,不要使用private int _equipid = 0;//私有字段public int EquiplD//使用私有字段进行逻辑判断,只能在当前类使用{get { return _equipid; }set { if (value < 100) _equipid = 100; else _equipid = value; }}private string equipname= string.Empty;//私有字段public string EquipName { get { return equipname; }set { equipname = value; }}//只读属性public double Pressure { get{double result = 2.5;return result;}}public DateTime Collecttime { get; set; }public void ShowInfo(){Console.WriteLine($"设备ID:{EquipID},设备名称:{EquipName}");}}
}
2.2 类属性的拓展
【1】类属性直接初始化
public int EquipID { get; set; } = 101;//直接赋值初始化
【2】类属性表达式
补充:使用属性的时候,有的地方也可以用方法代,但是设计的时候,如果你侧重的是属性(比如需要在dgv中显示)就要用属性,如果是单独的行为,可以用方法。
2.3 对象类型的属性
类是一种数据类型(引用类型),类中的属性和变量(局部变量和成员变量)也可以是类,开发中还会出现集合对象或者数组对象类型。
新建一个新的类,命名Equipment4表示设备,再新建一个类命名Sensor表示传感器,访问修饰符均选择public。
在Sensor类中:
public class Sensor{public int SensorNO { get; set; }//传感器编号public double SensorTemp { get; set; }//传感器温度}
在Equipment4类中:
public Sensor CurrentSensor { get; set; }//一个设备只有一个传感器
public Sensor[] CurrentSensorArray { get; set; }//一个设备有多个传感器,这就是对象类型的属性
在对象Program中:
static void Test3()
{
//一个对象Equip4设备其类 Equipment4包括CurrentSensor属性,这个属性又作为对象包括SensorNO和SensorTemp属性Equipment4 Equip4 = new Equipment4();//定义新对象Equip4其属性类是Equipment4Sensor sensor = new Sensor();//定义对象属性sensor其属性类是Sensorsensor.SensorNO = 1; //给对象属性ID赋值sensor.SensorTemp = 26.6; //给对象属性TEMP赋值Equip4.CurrentSensor = sensor;//给对象的CurrentSensor属性赋值Console.WriteLine(