# C#基础语法总结

目录介绍与机器视觉

C#介绍及项目创建;基本程序类结构;基本语法知识(using关键字;class关键字;注释;成员变量及成员函数;标识符);C#关键字;变量;数据类型;类型转换;运算符及其优先级;常量;流程控制语句;方法;数组;字符串

**C# 介绍 & 项目创建**

视觉项目全是 .NET 项目,控制台、Winform、工具类工程,**每天都要新建、调试、导包**。

**基础程序结构 /using/class**

所有视觉代码:相机类、算法类、工具类、参数类,**全部写在 class 里**;

调用视觉 SDK、图像处理库,**全靠 using 引用**。

**注释、标识符、关键字**

写工业代码要规范、注释参数、设备说明、报错日志,**必备**。

**变量、数据类型、常量**

  • 数值:像素、阈值、坐标、距离、角度 → 全是 int/double

  • 布尔:相机启停、触发信号、开关状态 → bool

  • 常量:固定参数、像素阈值、标定参数 → const

**类型转换**

图像处理、坐标计算、像素数值转换、硬件数据解析,**高频必用**。

**运算符 & 优先级**

图像计算、轮廓面积、距离计算、阈值运算、坐标修正,**全靠运算**。

**流程控制(if/for/while/switch)**

  • 图像阈值判断

  • 循环遍历像素、轮廓

  • 设备状态判断

  • 循环抓拍、连续检测

视觉核心逻辑全靠这个跑起来

**方法**

封装:拍照、图像处理、参数校验、设备控制、**模块化开发核心**。

**数组**

像素矩阵、坐标集合、采样数据、检测点集合,**底层全是数组**。

**字符串**

设备编号、日志输出、文件路径、报错信息、参数显示、日志打印,**高频使用**。

核心知识点

金额、价格、精确类型--Decimal

布尔:设备运行状态,正在操作或停止。

结构体:自定义一个类型,该类型是结构体,内部组成、成员包含都和类极其相似。存储区域不同。 自定义一种数据类型,包含多个成员。简单轻量级定义结构体,面过开发中一般定义类。

接口里面可以进行方法定义。

值类型是存储变量实际数据值。

引用类型:如果一个改变,其他也改变。

动态类型:简化运行过程,但类型不安全。

" " 定义字符串值赋给变量。 具体字符串 string name="李明";

接收输入 string remark=Console.Readline(); 方法、属性某一类型返回字符串,就可以用字符串来接收。

\\\\+字符--转义 存储路径字符串

@ 路径字符串传递 转义字符用@

只要一个变量是引用类型就可以赋给null

类型转换:高比例应用。 由一种类型转换为另一种类型。

小类型转大类型--直接转

d与f不能隐式转换 显示转换

既有整数又有浮点用浮点型变量接收。

小数位后面会丢失。

任何一种目标类型转换为值类型 type.Parse(string)

枚举类型转换对应Object方法 (枚举值对象)

**double--To double** **decimal--To decimal ** int---int32 float---ToSingle

值类型用这四种。

运算符:做计算的符号。

自增自减:对当前值自增后后去自增后的值++在前,处理过后自减是不是立即赋值,立即赋值--在前,不是立即赋值写在前后都无所谓。自增的值赋给变量,希望是自增后的值把自增号在前,先赋值再自增斜后面。

=算术运算符 ==关系运算符 经常用来做逻辑判断

判断是不是什么取反

处理过程功能有不同情况根据关系运算符处理。两个操作数比较用六个关系运算符。

逻辑运算符if和linq条件扩展中运用多。

面试简历:在外口碑好,人品正直可靠。

取反高位为负

= 赋值运算符

先把C*谁的值赋给结果谁

非托管类型,值类型。 size of

获取某一个引用类型的类型对象。 typeof()

&和* 返回变量实际地址 指针 不讲

as转换失败也是null 强转针对引用类型

引用类型 字段 属性 方法 都可以通过字段走

最终得到的值由右侧表达次确定,逻辑一定要严谨。

三目运算符相当于if...else 一句话就搞定 ?:

常量值不能修改。

常量三种进制。

声明字符串两种形式搞明白。

条件可能性太多不推荐使用if...else...if(效率不是最优) 根据条件判断个数选一个\两个\多个分支 --根据条件判断个数和程序过程处理来决定

if语句:一条、多条、调用方法执行。

if else:满足条件执行1 不满足执行2

推荐是某个可能性值的情况用switch case处理

每个case里面break跳出分支结构

都不满足执行default里面的代码

某一种条件对应的值用switch

多种可能性执行同一种结果连着写case

多种可能值做不同处理这种方式用switch case

两种情况也可以用switch分支,大于等于3个情况就可以用switch(对应多个可能值情况,每一种对应一个方式)用switch

基本语法分支和遵守规则弄明白(使用场景和执行过程咋样)

语法格式不能错 值必须是常量值 每一种情况下跟break default可有可无

一系列过程做相同处理用循环分支 确定循环次数处理 条件不满足退出循环

for循环条件就是控制循环次数

数组相同处理用for循环嵌套

无限循环以后用while

for循环确定循环次数,while循环不确定循环情况。

初始化循环变量+表达式+循环主题

循环内外及迭代都在外面。

while后续使用多 for与while更推荐使用while

do while--不管表达式如何都回去执行一次【先做一次,再判断条件】(至少执行一次主体 再判断用do...while)

不适合情况:满足条件再执行。

先会执行一次再会去判断条件再持续执行用它,判断符合条件在执行不能用do...whlie;用它会有所不同。

while for foreach使用多,do while一般不用。应用场景一般不适合用。

至少执行一次用do...while

foreach;更多选择他不选for 对象列表、集合类、对集合类筛选出某一部分数据对这里面数据某一部分子集再来遍历对里面子对象做某一段做逻辑处理用foreach

for while foreach用的多(主要涉及这三个循环使用)

在集合中找到某个数字,对这个数字进行处理,操作。

跳出当前循环break 内层使用break跳出整个内层,外层使用break跳出整个循环。

continue:跳出当次循环。

break会跳出当前循环;continue跳过本次循环会继续下一次迭代进入下一次循环里面(跳过当次循环)

方法就是函数 函数名就是方法名

无返回值用void,有返回值用返回值类型

通过方法调用名称通过名称调用。

一个方法可以没参数,可以有多个参数。

一个方法主体有一条语句,也可以有很多条语句。

方法是对一个特定功能的封装。特定功能实现通过方法的主体就是里面代码块。定义方法通过方法实现一个功能,这个功能通过执行方法里面的代码块来实现。

封装:方法封装。

如果带返回值跟return语句 一般类里面方法访问修饰符省略一般默认为private

方法访问修饰符:再一个类中定义,再另一个类中调用。 方法在类中可见性。在另一个类中调用这个类中的方法是否可访问这个概念。

求和返回值结果。

方法取名根据要实现的方法功能而定。功能要具有一定可读性,取名不能乱取。

(参数列表) --定义形参

sum变量接收 后跟返回值语句 根据返回值类型声明一个变量接收结果。

方法用类封装里面

私有外部不能调用,内部可以调用。 调用先创建类的实例,通过类的实例方式来调用。(有参数传实参)

定义时候叫方法形参,调用时候叫实参。

无返回值void不需要写return

静态方法:开发常用。 类成员。 静态方法与实例方法区别:类成员方法(普通方法:实例方法)。

方法的参数类型(参数的传递方式):

两个形参用来接收调用过去的实参,形参的值,两个参数变量用来接收形参。

改实参不会影响形参,改形参不会影响实参。

值参数是默认的参数类型。

引用参数前加ref

return返回值后输出参数返回多余的值

方法参数数组:

可以传数组或各个参数名或也可以没有。

数组每个字符串就是一个元素

形参针对数组遍历执行

可以传递参数数组相等的具体实参

数量不确定可有可无时候用参数数组来描述

假设方法没有参数,可以不传参,也不会报错。

方法参数个数不确定位置情况下用参数数组作为参数列表。如果一个直接params,如果多个还有一个或多个确定参数把它写前面,参数数组写参数列表最后一个。

一个类中相关成员在另一个类中具有可见性,可以访问,访问修饰符设置为public,但需要引用命名空间。

私有的,修饰成员在类的内部(当前类)可以访问,对外边不可访问。

默认创建一个项目,命名空间就是程序集名称。

类的内部和派生类可以访问。

主要是前四种。

带new实例化对象

不管公开还是私有,在类的内部可以访问,外部不可访问。

internal类的默认访问修饰符。成员都是internal形式,即使是共有的也是internal,也可以外部访问,只限在同一程序集里面。可以访问的最高都是internal

子类不能比基类高,子类是internal,基类不能是public

基类中私有方法不可访问

不是跨程序集,一般来说很少使用。(protected internal)

protected继承中可以访问

数组是一个集合,集合中存在同一种类型的数据,数组长度固定,具有连续的内存位置。 数组存储一组数据。

数组是引用类型,存储在堆里面。 【】一维数组

循环遍历foreach麻烦也可以

遍历循环找到某些相同的数据进行输出

二维数组用的并不多,复杂功能使用。 多维也称矩阵数组。

二维:复合型一维,每个一维里面又是一个数组。

第一个是行,第二个是列。

三维:外层看做一个一维数组,每个元素里面又是一个二维数组,二维里面又看做一个一维,里面每个元素又是一个一维数组。

所有数组基类:Array类 主要:Length属性(通过Length获取数组里面多少个元素)

一维数组设计相对较多,多维相对较少。

Clear(处理元素相对数组 要处理元素开始索引 要清除元素个数) 相对较少涉及

GetLength:针对多维数组使用。

翻转:前后颠倒(后面跑前面,前面跑后面。)

编程中过程处理使用Array类的一些方法。

ToString()很少用到

Copy:不是很常见

第二个加粗:多维数组常用。

IndexOf:在数组中的位置。 翻转也要回 关键几个加粗部分。

字符串处理:以后很多应用语句都会涉及。

相关推荐
Volunteer Technology1 小时前
SpringAI Chat Client (四)
人工智能·spring
城事漫游Molly1 小时前
案例研究:如何明智地选择案例、精巧地界定边界、深刻地进行分析?
大数据·人工智能·ai写作·论文笔记
易观Analysys1 小时前
范式革命已至:OpenClaw引爆中国AI“行动时代”——《重构与崛起—OpenClaw时代的中国Agent产业生态报告》解读一
人工智能·重构
CoCo的编程之路1 小时前
2026 前端效能飞跃:深度解析智能助手的页面构建最大化方案
前端·人工智能·ai编程·智能编程助手·文心快码baiducomate
豹哥学前端1 小时前
agent智能体经典范式构建
人工智能·后端
纤纡.2 小时前
从零搭建 AI 智能 PDF 问答工具:Streamlit+LangChain + 千问大模型实战
人工智能·阿里云·语言模型·langchain
莱歌数字2 小时前
汽车外流场仿真+深度学习预测:风阻优化的“秒级革命”
人工智能·科技·汽车·电脑·制造·散热
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-05-12
大数据·人工智能·经验分享·神经网络·产品运营
Resistance丶未来2 小时前
从零构建大语言模型:核心原理与实战落地
人工智能·ai·语言模型·自然语言处理·nlp·多模态大模型·ai工具