当前位置: 首页 > article >正文

C#上位机--关键字

引言

在 C# 上位机开发领域,关键字是构建程序的基石。它们是编程语言赋予的特殊词汇,每个关键字都有其独特的用途和功能。了解并熟练运用这些关键字,能够让开发者更加高效地编写代码,实现各种复杂的功能。本文将深入探讨 C# 中一些在上位机开发中常用且重要的关键字,通过详细解释和丰富的示例来帮助大家更好地掌握它们。

1. class:类的构建基石

作用

class 关键字用于定义一个类。在面向对象编程中,类是对象的抽象模板,它封装了数据和行为。在上位机开发中,我们可以使用类来组织代码,将相关的功能和数据封装在一起。

示例

// 定义一个表示设备的类
class Device
{// 字段private string deviceName;private int deviceId;// 构造函数public Device(string name, int id){deviceName = name;deviceId = id;}// 方法public void PrintDeviceInfo(){Console.WriteLine($"设备名称: {deviceName}, 设备ID: {deviceId}");}
}class Program
{static void Main(){// 创建Device类的对象Device myDevice = new Device("打印机", 1);myDevice.PrintDeviceInfo();}
}

解释

在这个示例中,class Device 定义了一个名为 Device 的类,它包含了设备的名称和 ID 两个字段,以及一个构造函数用于初始化这些字段,还有一个方法用于打印设备信息。在 Main 方法中,我们创建了 Device 类的一个对象,并调用其方法。

2. static:静态成员的标识

作用

static 关键字用于声明静态成员,静态成员属于类本身,而不是类的实例。在上位机开发中,静态成员可以用于共享数据或提供全局可用的方法。

示例

class Calculator
{// 静态字段public static int calculationCount = 0;// 静态方法public static int Add(int a, int b){calculationCount++;return a + b;}
}class Program
{static void Main(){int result = Calculator.Add(3, 5);Console.WriteLine($"计算结果: {result}");Console.WriteLine($"计算次数: {Calculator.calculationCount}");}
}

解释

在这个示例中,Calculator 类有一个静态字段 calculationCount 用于记录计算次数,还有一个静态方法 Add 用于执行加法运算。由于 calculationCount 和 Add 都是静态的,我们可以直接通过类名来访问它们,而不需要创建 Calculator 类的实例。

3. void:无返回值的标识

作用

void 关键字用于表示方法没有返回值。在上位机开发中,很多方法只是执行一些操作,而不需要返回具体的值,这时就可以使用 void 关键字。

示例

class Logger
{public void LogMessage(string message){Console.WriteLine($"日志信息: {message}");}
}class Program
{static void Main(){Logger logger = new Logger();logger.LogMessage("系统启动成功");}
}

解释

在这个示例中,LogMessage 方法的返回类型是 void,表示它不返回任何值。该方法只是将传入的消息打印到控制台。

4. publicprivate 和 protected:访问修饰符

作用

这些访问修饰符用于控制类成员的访问权限。

  • public:表示成员可以被任何类访问。
  • private:表示成员只能在定义它的类内部访问。
  • protected:表示成员可以在定义它的类及其派生类中访问。

示例

class ParentClass
{public string publicField = "公共字段";private string privateField = "私有字段";protected string protectedField = "受保护字段";public void PrintFields(){Console.WriteLine($"公共字段: {publicField}");Console.WriteLine($"私有字段: {privateField}");Console.WriteLine($"受保护字段: {protectedField}");}
}class ChildClass : ParentClass
{public void PrintProtectedField(){Console.WriteLine($"从子类访问受保护字段: {protectedField}");}
}class Program
{static void Main(){ParentClass parent = new ParentClass();Console.WriteLine($"从外部访问公共字段: {parent.publicField}");// 以下代码会报错,因为私有字段不能从外部访问// Console.WriteLine($"从外部访问私有字段: {parent.privateField}"); ChildClass child = new ChildClass();child.PrintProtectedField();}
}

解释

在这个示例中,publicField 可以从任何地方访问,privateField 只能在 ParentClass 内部访问,protectedField 可以在 ParentClass 及其派生类 ChildClass 中访问。

5. abstract:抽象类和抽象方法的标识

作用

abstract 关键字用于定义抽象类和抽象方法。抽象类不能被实例化,它主要用于作为基类,为派生类提供统一的接口和部分实现。抽象方法只有声明,没有实现,派生类必须实现这些抽象方法。

示例

// 抽象类
abstract class Shape
{// 抽象方法public abstract double CalculateArea();
}// 派生类
class Circle : Shape
{private double radius;public Circle(double r){radius = r;}// 实现抽象方法public override double CalculateArea(){return Math.PI * radius * radius;}
}class Program
{static void Main(){// 不能实例化抽象类// Shape shape = new Shape(); Circle circle = new Circle(5);double area = circle.CalculateArea();Console.WriteLine($"圆的面积: {area}");}
}

解释

在这个示例中,Shape 是一个抽象类,其中的 CalculateArea 是抽象方法。Circle 类继承自 Shape 类,并实现了 CalculateArea 方法。我们不能直接创建 Shape 类的对象,但可以创建 Circle 类的对象并调用其 CalculateArea 方法。

6. sealed:密封类和密封方法的标识

作用

sealed 关键字用于防止类被继承或方法被重写。在上位机开发中,当我们不希望某个类被其他类继承,或者某个方法被重写时,可以使用 sealed 关键字。

示例

class BaseClass
{public virtual void PrintMessage(){Console.WriteLine("基类消息");}
}sealed class SealedClass : BaseClass
{public sealed override void PrintMessage(){Console.WriteLine("密封类消息");}
}// 以下代码会报错,因为 SealedClass 是密封类,不能被继承
// class AnotherClass : SealedClass { } class Program
{static void Main(){SealedClass sealedObj = new SealedClass();sealedObj.PrintMessage();}
}

解释

在这个示例中,SealedClass 是一个密封类,不能被其他类继承。PrintMessage 方法在 SealedClass 中被重写并标记为 sealed,这意味着它不能在派生类中被进一步重写。

7. trycatch 和 finally:异常处理关键字

作用

这些关键字用于处理程序中可能出现的异常。try 块中包含可能会抛出异常的代码,catch 块用于捕获并处理异常,finally 块中的代码无论是否发生异常都会执行。

示例

class Program
{static void Main(){try{int result = Divide(10, 0);Console.WriteLine($"计算结果: {result}");}catch (DivideByZeroException ex){Console.WriteLine($"发生异常: {ex.Message}");}finally{Console.WriteLine("无论是否发生异常,都会执行此代码块");}}static int Divide(int a, int b){return a / b;}
}

解释

在这个示例中,Divide 方法可能会抛出 DivideByZeroException 异常。在 try 块中调用 Divide 方法,如果发生异常,会被 catch 块捕获并处理,最后 finally 块中的代码会执行。

总结

C# 中的关键字在其上位机开发中扮演着至关重要的角色。从类的定义到访问控制,从异常处理到静态成员的使用,每个关键字都有其独特的用途和价值。通过深入理解和熟练运用这些关键字,开发者能够编写出更加高效、健壮和易于维护的上位机程序。希望本文能帮助大家更好地掌握 C# 上位机开发中的这些重要关键字。

相关文章:

C#上位机--关键字

引言 在 C# 上位机开发领域,关键字是构建程序的基石。它们是编程语言赋予的特殊词汇,每个关键字都有其独特的用途和功能。了解并熟练运用这些关键字,能够让开发者更加高效地编写代码,实现各种复杂的功能。本文将深入探讨 C# 中一…...

1.C语言初识

C语言初识 C语言初识基础知识hello world数据类型变量、常量变量命名变量分类变量的使用变量的作用域 常量字符字符串转义字符 选择语句循环语句 函数;数组函数数组数组下标 操作符操作符算术操作符移位操作符、位操作符赋值操作符单目操作符关系操作符逻辑操作符条…...

软件测试中的BUG

文章目录 软件测试的生命周期BugBug 的概念描述 Bug 的要素案例Bug 级别Bug 的生命周期与开发产生争执怎么办?【高频面试题】先检查自身,Bug 是否描述的不清楚站在用户角度考虑并抛出问题Bug 的定级要有理有据提⾼自身技术和业务水平,做到不仅…...

TinyEngine v2.2版本发布:支持页面嵌套路由,提升多层级路由管理能力开发分支调整

2025年春节假期已过,大家都带着慢慢的活力回到了工作岗位。为了让大家在新的一年继续感受到 Tiny Engine 的成长与变化,我们很高兴地宣布:TinyEngine v2.2版本正式发布!本次更新带来了重要的功能增强------页面支持嵌套路由&#…...

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时,添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为,我们可以将已登录状态的Cookies存储起来,并在下次自动化测试或爬虫任务中直接加载这些Cookies,从而跳过登录步骤。 Cookies简介 …...

Storm实时流式计算系统(全解)——中

storm编程的基本概念-topo-spout-bolt 例如下: storm 编程接口-spout的结构及组件实现 storm编程案例-spout组件-实现 这是我的第一个组件(spout组件继承BaseRichSput)所有重写内部的三个方法,用于接收数据(这里数据是…...

【算法工程】大模型局限性新发现之解决能连github但无法clone项目的问题

最近,linux服务器遇到一个奇怪的问题,能ping通github,但是无法clone git项目,尝试了各种大模型,都提到代理啥的问题,发现没有一个能解决问题。 后来尝试设置 http.sslVerify 为 false,才解决问题…...

让deepseek更专业的提示词教程

一、明确需求和目标 在使用DeepSeek之前,首先要明确你的需求和目标。例如,你是要生成一篇学术论文的摘要,还是一个商业文案的大纲,亦或是一段技术分析。明确的目标可以帮助你更有针对性地编写提示词。 二、使用专业术语和结构化…...

《Python实战进阶》No 9:使用 Celery 实现异步任务队列

第9集:使用 Celery 实现异步任务队列 引言 在现代 Web 应用中,许多操作(如发送邮件、处理文件上传、执行复杂计算等)可能需要耗费较长时间。如果这些操作直接在主线程中执行,会导致用户请求阻塞,降低用户体…...

【Mark】记录用宝塔+Nginx+worldpress+域名遇到的跨域,301,127.0.0.1,CSS加载失败问题

背景 想要用宝塔搭建worldpress,然后用域名直接转https,隐藏掉ipport。 结果被折磨了1天,一直在死活在301,127.0.0.1打转 还有css加载不了的情况 因为worldpress很多是301重定向的,所以改到最后我都不知道改了什么&am…...

Linux | Ubuntu 与 Windows 双系统安装 / 高频故障 / UEFI 安全引导禁用

注:本文为 “buntu 与 Windows 双系统及高频故障解决” 相关文章合辑。 英文引文,机翻未校。 How to install Ubuntu 20.04 and dual boot alongside Windows 10 如何将 Ubuntu 20.04 和双启动与 Windows 10 一起安装 Dave’s RoboShack Published in…...

计算机毕业设计SpringBoot+Vue.js手机商城 (源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

CSS—隐藏元素:1分钟掌握与使用隐藏元素的方法

个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–display:none3–visibility: hidden4–opacity: 05–position: absolute;与 left: -9999px;6–z-index 和 position7–clip-path: circle(0%) 2. display:none 标签会挂载在html中,但是不会在页面上…...

EtherCAT总线学习笔记

一、EtherCAT的概述: EtherCAT是由德国BECKHOFF自动化公司于2003年提出的 实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其 从站节点使用专用控制芯片,主站使用标准的以太网控制器。 EtherCAT的主要特点如…...

自学微信小程序的第八天

DAY8 1、使用动画API即可完成动画效果的制作,先通过wx.createAnimation()方法获取Animation实例,然后调用Animation实例的方法实现动画效果。 表40:wx.createAnimation()方法的常用选项 选项 类型 说明 duration number 动画持续时间,单位为毫秒,默认值为400毫秒 timing…...

WebRTC与PJSIP:呼叫中心系统技术选型指南

助力企业构建高效、灵活的通信解决方案 在数字化时代,呼叫中心系统的技术选型直接影响客户服务效率和业务扩展能力。WebRTC与PJSIP作为两大主流通信技术,各有其核心优势与适用场景。本文从功能、成本、开发门槛等维度为您深度解析,助您精准匹…...

Vue-Flow绘制流程图(Vue3+ElementPlus+TS)简单案例

本文是vue3Elementplusts框架编写的简单可拖拽绘制案例。 1.效果图&#xff1a; 2.Index.vue主代码&#xff1a; <script lang"ts" setup> import { ref, markRaw } from "vue"; import {VueFlow,useVueFlow,MarkerType,type Node,type Edge } fro…...

PDF文件转换为PNG图像

要实现将PDF文件转换为PNG图像&#xff0c;可以使用Python的pdf2image库。pdf2image是一个基于poppler和Pillow&#xff08;PIL&#xff09;的库&#xff0c;可以将PDF页面转换为图像。 首先&#xff0c;需要安装必要的库&#xff1a; pip install pdf2image在安装pdf2image时…...

c++中的静态多态和动态多态简介

在 C 中&#xff0c;多态性&#xff08;Polymorphism&#xff09; 分为 静态多态&#xff08;Static Polymorphism&#xff09; 和 动态多态&#xff08;Dynamic Polymorphism&#xff09;&#xff0c;二者通过不同的机制实现代码的灵活性。以下是详细对比和核心要点&#xff1…...

如何通过 LlamaIndex 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 逐步介绍如何使用 RAG 和 LlamaIndex 提取数据并进行搜索。 在本文中&#xff0c;我们将使用 LlamaIndex 来索引数据&#xff0c;从而实现一个常见问题搜索引擎。 Elasticsearch 将作为我们的向量数据库&#xff0c;实现向量搜索&am…...

Boosting

Boosting 学习目标 知道boosting集成原理和实现过程知道bagging和boosting集成的区别知道AdaBoost集成原理 Boosting思想 Boosting思想图 每一个训练器重点关注前一个训练器不足的地方进行训练通过加权投票的方式&#xff0c;得出预测结果串行的训练方式 1 什么是boosting 随着…...

【通俗讲解电子电路】——从零开始理解生活中的电路(一)

导言&#xff1a;电子电路为什么重要&#xff1f; ——看不见的“魔法”&#xff0c;如何驱动你的生活&#xff1f; 清晨&#xff0c;当你的手机闹钟响起时&#xff0c;你可能不会想到&#xff0c;是电子电路在精准控制着时间的跳动&#xff1b;当你用微波炉加热早餐时&#…...

LeetCode72编辑距离(动态规划)

给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 “horse”, word2 “ros” 输出&#xf…...

rabbitmq单向ssl认证配置与最佳实践(适用于各大云厂商)

背景 这里后补直接上代码 最佳实践 主要从两个方面保证消息不丢失 RabbitMQ方面 创建队列时开启持久化创建交换器时开启持久化创建镜像队列&#xff08;可选&#xff09;开启延迟队列&#xff08;可选&#xff09; 代码层面 开启生产者到交换器回调参数开启交换器到队列…...

【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)

Kubernetes 架构 k8s 集群 多个 master node 多个 work nodeMaster 节点&#xff08;主节点&#xff09;&#xff1a;负责集群的管理任务&#xff0c;包括调度容器、维护集群状态、监控集群、管理服务发现等。Worker 节点&#xff08;工作节点&#xff09;&#xff1a;实际运…...

Windows版FFmpeg使用及B站视频下载示例python源码

Windows版FFmpeg使用及B站视频下载示例python源码 FFmpeg介绍和下载 FFmpeg 是一个功能强大、灵活且广泛使用的多媒体处理工具&#xff0c;无论是在专业领域还是日常使用中&#xff0c;都能满足各种多媒体处理需求。FFmpeg 是一个开源项目&#xff0c;遵循 LGPL 或 GPL 许可。…...

飞书考勤Excel导入到自己系统

此篇主要用于记录Excel一行中&#xff0c;单条数据的日期拿取&#xff0c;并判断上下班打卡情况。代码可能满足不了大部分需求&#xff0c;目前只够本公司用&#xff0c;如果需要&#xff0c;可以参考。 需要把飞书月度汇总的考勤表导入系统中可以参考下。 下图为需要获取的年…...

【leetcode hot 100 560】和为K的子数组

解法一&#xff1a;用左右指针寻找字串&#xff0c;如果和>k&#xff0c;则减少一个数&#xff08;left&#xff09;&#xff1b;如果和<k&#xff0c;则加上一个数&#xff08;right&#xff09;。 class Solution {public int subarraySum(int[] nums, int k) {int nu…...

EGO-Planner的无人机视觉选择(yolov5和yolov8)

EGO-Planner的无人机视觉选择&#xff08;yolov5和yolov8&#xff09; 效果 yolov5检测效果 yolov8检测效果 一、YOLOv8 vs YOLOv5&#xff1a;关键差异解析 1. 训练效率&#xff1a;为何YOLOv8更快&#xff1f; 架构轻量化 YOLOv8采用C2f模块&#xff08;Cross Stage Partia…...

C++ | 面向对象 | 类

&#x1f47b;类 &#x1f47e;语法格式 class className{Access specifiers: // 访问权限DataType variable; // 变量returnType functions() { } // 方法 };&#x1f47e;访问权限 class className {public:// 公有成员protected:// 受保护成员private:// 私有成员 }…...