C#零基础自学
文章平均质量分 53
C#入门
Expect for future
宝剑锋从磨砺出,梅花香自苦寒来
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
康耐视VisionPro+C#程序编写
康耐视Visionpro创建模板基础程序知识原创 2023-11-02 16:18:11 · 1757 阅读 · 0 评论 -
winform零基础学习(十一)—C# Winform窗体(类)之间传值的多种方法浅析
摘要一般的工程都是多个form组成的,各个窗体之间经常要灵活的传递数据。下面分享一点自己的经验:窗体传值的方法有很多,下面仅介绍我用过的一些,不知道官方叫这些什么方法,大家也可以找找看其他的。一、通过构造器传值这是最简单的一种方式,例如我从form1中要传一个字符串去form2首先,在form2的构造器中稍作修改: public Form2(String s) { InitializeComponent(); t原创 2021-03-30 19:22:46 · 4245 阅读 · 0 评论 -
C#自学43一C#的4种参数:一般参数,REF 参数,OUT 参数,参数数列
方法中的参数分为实际参数和形式参数,实际参数被称为实参,是在调用方法时传递的参数;形式参数被称为形参,是在方法定义中所写的参数。public int Add(int a,int b){ return a+b;}在上面的方法定义中,a 和 b 是形式参数。在 Print 调用方法时使用如下代码:public void Print(){ Add(3,4);}在调用 Add 方法时传递的参数 3 和 4 即为实际参数。在 C# 语言中,方法中的参数除了定义数据类型外,还可以定原创 2021-03-30 16:15:25 · 728 阅读 · 0 评论 -
设计模式理解——七大设计原则的概念与实现方法
对于设计模式理解请看另一篇博文,本文章直接讲七大原则一、单一职责原则单一职责原则的定义单一职责原则。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。该原则提出对象不应该承担太多职责,如果一个对象承担了太多的职责,至少存在以下两个缺点:1、一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力;2、当客户端需要该原创 2021-02-24 16:28:24 · 460 阅读 · 0 评论 -
C#自学42一抽象类和接口
什么是抽象类、接口、普通类呢?抽象类:在编程语句中,把用abstract关键字修饰的类称为抽象类。抽象类是不完整的,只能作为基类。一般用来进行类型隐藏和充当全局变量的角色。接口:声明时用interface关键字,将隐式公共方法和属性结合起来,以封装特定功能的一个集合。普通类: 就是只有Class关键词修饰的类。那么每个类都可以有什么成员呢?抽象类:① 抽象成员:就是使用了abstract修饰符。包括方法、属性、索引、事件② 非抽象成员,没有使用abstract关键字的。(方法、属性、索引、事件原创 2021-02-22 19:43:49 · 169 阅读 · 0 评论 -
原创 C#自学41一一 DialogResult循环询问同一问题
本程序实现功能循环询问是否需要创建新模板DialogResult result = MessageBox.Show("是否需要创建新模板?", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { ucHalconWindow1.AutoSaveModel(); Dia原创 2021-02-05 14:51:36 · 210 阅读 · 0 评论 -
C#自学40一C#调用Halcon无法加载+DLL找不到指定的模块
对系统环境变量进行配置:1.右击此电脑—属性—高级系统设置—环境变量2.选中Path—点击编辑3.新建,将dll文件路径加入其中原创 2021-01-18 16:49:59 · 2405 阅读 · 0 评论 -
C#自学39一在picturebox控件上画ROI区域
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Forms;namespace Auto_Dete原创 2021-01-11 19:50:28 · 3346 阅读 · 7 评论 -
C#自学38一C# 之 Dictionary实现textbox数据保存,读取
必须包含名空间 System.Collection.GenericDictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)键必须是唯一的,而值不需要唯一的键和值都可以是任何类型(比如:string, int, 自定义类型等等)可以简单将 Dictionary 理解为 键值对 数据的集合一、常用方法// 定义Dictionary<string, string> dictExecutes = new Dictionary<string, string>(原创 2020-12-22 19:45:35 · 1075 阅读 · 0 评论 -
C#自学37一手动输入到dataGridView数据存储到txt文本,清空数据,读取txt文本
private void bntSave_Click(object sender, EventArgs e) { //实例化一个保存文件对话框 SaveFileDialog sf = new SaveFileDialog(); //设置文件保存类型 sf.Filter = "txt文件|*.txt"; //如果用户没有输入扩展名,自动追加后缀 sf.原创 2020-12-08 20:06:21 · 1221 阅读 · 0 评论 -
C#自学37一 OpenCvSharp之Canny算法边缘检测
一、Canny算法步骤:1.高斯模糊 — GaussianBlur2.灰度转化 —CvtColor3.计算梯度 — Sobel / Scharr4.非最大信号抑制:边缘信号很强,但只能有一个信号(边缘只能是一条线,而不能是一个有宽度的面),对其他的非边缘信号进行压制(在梯度方向上,如果不是最大信号就剔除)。5.高低阈值输出二值图像。找到梯度强度和方向:θ:在 0 ~ 180 之间,表示梯度方向 ,值表现了梯度在那个方向的变化率最大。45 ,90 ,135 对应区域1.黄色区域其值范围:原创 2020-11-18 20:21:08 · 2690 阅读 · 0 评论 -
C#自学36一return的用法及意义return 0和return 1和return -1
1、返回值int 类型的函数返回:return语句用来结束循环,或返回一个函数的值。return 0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。return -1::表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败;以上两个是约定俗成,系统提供的函数绝大部分定义为int类型返回值的都是这样的。返回值是返回给系统用的,给系统看得。一般做调试的时候也会用的,当出现错误的时候可以根据返回值来确定问题出在哪一个函数上的。再次提醒,注意此时返回的类型是i原创 2020-11-18 18:47:50 · 6694 阅读 · 1 评论 -
C#自学35一如何实现委托的步骤
委托订阅了这个事件,观察者实例化,图纸Delegatedelegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够拥有一个签名(signature),并且它"只能持有与它的签名相匹配的方法的引用"。实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate:1. 声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。2. 创建delegate对象,并"将你想要传递的函数作为参数传入"。3原创 2020-11-13 14:55:56 · 553 阅读 · 0 评论 -
C#自学34一C#事件的理解
C#事件与委托十分相似,其实事件包含了一个私有委托,所以事件就像是专门用于某种特殊用途的简单委托。正如上图所示,发布者类Incrementer里面的事件CountedADozen就像一个装方法的容器,这个容器对方法的添加与删除是里面的私有委托来实现的(这里待会儿可以通过代码理解),发布者类Incrementer还有一块触发事件的代码,这段触发事件代码的方法是那个方法容器的引线,只要运行这方法,引线点燃(触发事件的代码开始运行),引爆了容器(事件CountedADozen开始运行委托里面装载的方法,比如图原创 2020-11-03 20:10:45 · 169 阅读 · 0 评论 -
C#自学33一值类型和引用类型参数传递
原则:尽可能控制对数据的修改,如果可以预测某个数据不会或不应该被改变,就要对其控制,而不要期望使用这个数据的调用者不会改变其值。如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很难被检查到,所以我们在设计方法参数的时候,要充分考虑传递引用类型参数或者引用方式传递引用类型参数可能带来的后果。如果一个数据在传递过程中不能被改变,就要在构建这个对象的时候就使其值(字段或属性)不被改变。一、对于简单的参数的控制1、值类型参数传递这种情况因为传递的是参数的副本,不影响原始值,不需要控制。原创 2020-10-29 19:38:25 · 190 阅读 · 1 评论 -
C#自学31—file类的使用方法,使用File类操作文件的数据
分隔符原创 2020-10-18 15:14:58 · 351 阅读 · 0 评论 -
C#自学30—path类的使用方法
class Program{static void Main(string[] args){string str = @“C:\3000soft\Red Spider\Data\Message\老赵.wav”; Console.WriteLine(Path.GetFileName(str));//获得文件名 Console.WriteLine(Path.GetFileNameWithoutExtension(str));//获得文件名但是不包含扩展名原创 2020-10-17 21:30:28 · 168 阅读 · 0 评论 -
C#自学29—简体字繁体字转换
class Program { //简体字 6000 0-5999 //繁体字 5999 0-5998 private const String Jian = "啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹..原创 2020-10-17 21:24:05 · 2922 阅读 · 0 评论 -
C#自学28—foreach循环
一、概念使用foreach可以迭代数组或者一个集合对象二、实例通过foreach循环输出整型数组中的元素通过for循环输出整型数组中的元素foreach循环设置数组元素的计算器 static void Main(string[] args) { int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 }; foreach (int element in fibarray原创 2020-10-17 21:09:05 · 204 阅读 · 0 评论 -
C#自学27—Hastable 键值对集合
在键值对集合当中,我们是根据键去找值的。键值对集合当中,键必须是唯一的,而值是可以重复的。创建键值对对象:Hashtable ht = new Hashtable();给键值对对象赋值的两种方式:ht.add(1,“abc”);Ht[1]=“bcd”; //这种方式可以覆盖掉上面对应键赋的值遍历Hashtable键值对集合:foreach (var item in ht.Keys){Console.WriteLine(“键是{0},值是{1}”, item, ht[item]);}原创 2020-10-17 21:06:55 · 1058 阅读 · 0 评论 -
C#自学26—var推断类型
传统定义变量是已经知道变量的类型,如: int a = 1; string b = “hello”;用Var类型预先不用知道变量的类型;根据你给变量赋值来判定变量属于什么类型;如var a =1; 则a是整型,var a = “hello”;则a是字符型,但使用Var类型要注意:1:必须在定义时初始化,即不能先定义后初始化,如:var a;a = 1;这样是不允许的2:一旦初始化完成,不能再给变量赋与初始化不同的变量3:var类型的变量必须是局部变量var可代替任何类型,编译器会根据上下文来判原创 2020-10-17 20:49:23 · 504 阅读 · 0 评论 -
C#自学25一ArrayList理解及常用的方法
一、概念ArrayList是一个特殊数组,通过添加和删除元素就可以动态改变数组的长度。ArrayList集合相对于数组的优点:支持自动改变大小,可以灵活的插入元素,可以灵活的删除元素,可以灵活的访问元素,但是ArrayList只支持一维,并且查询和检索的速度比较慢。ArrayList 类似于数组,也是一种存储数据的方式,其存储的数据称为元素,默认初始容量为0,在使用它时需要引入命名空间:using System.Collections;二、语法格式为:ArrayList arrayList =原创 2020-10-17 20:05:08 · 348 阅读 · 0 评论 -
C#自学25一委托(基础篇)
1.为什么要使用委托将一个方法作为一个参数传给另一个方法2.委托的概念声明一个委托类型委托所指向的函数必须跟委托具有相同的签名(参数和返回值)转载 2020-10-12 19:32:27 · 176 阅读 · 0 评论 -
winform零基础学习(七)—listview控件使用方法
string[] XPPoint = new string[] { }; string[] YPPoint = new string[] { }; string[] XRPoint = new string[] { }; string[] YRPoint = new string[] { };``` //在listview显示 void ShowRobotList(string[] X, string[] Y)...原创 2020-10-10 16:13:54 · 1266 阅读 · 0 评论 -
C#自学24一继承:里氏转换+protected用法
1、里氏转换1)、子类可以赋值给父类2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。2、子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。3、is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个falseas:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null4、protected受保护的:可以在当前类的内部以及该类的子类中访问。using System;using System.Collections.Generic原创 2020-10-07 15:26:51 · 278 阅读 · 0 评论 -
C#自学23一继承理解及继承特性
1、继承我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类。Student、Teacher、Driver 子类 派生类Person 父类 基类子类继承了父类,那么子类从父类那里继承过来了什么?首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。问题:子类有没有继承父类的构造函数?答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类原创 2020-10-07 14:33:09 · 561 阅读 · 0 评论 -
C#自学22一字符串提供的各种方法
1)、Length:获得当前字符串中字符的个数2)、ToUpper():将字符转换成大写形式3)、ToLower():将字符串转换成小写形式4)、Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较两个字符串,可以忽略大小写5)、Split():分割字符串,返回字符串类型的数组。6)、Substring():解决字符串。在截取的时候包含要截取的那个位置。7)、IndexOf():判断某个字符串在字符串中第一次出现的位置,如果没有返回-1、原创 2020-10-09 09:27:25 · 157 阅读 · 0 评论 -
C#自学21一命名空间,值类型和引用类型,字符串性质
1、命名空间可以认为类是属于命名空间的。如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间。1)、用鼠标去点2)、alt+shift+F103)、记住命名空间,手动的去引用2、在一个项目中引用另一个项目的类1)、添加引用2)、引用命名空间3、值类型和引用类型区别:1、值类型和引用类型在内存上存储的地方不一样。2、在传递值类型和传递引用类型的时候,传递的方式不一样。值类型我们称之为值传递,引用类型我们称之为引用传递。我们学的值类型和引用类型:值类型:i原创 2020-10-07 09:02:12 · 225 阅读 · 0 评论 -
C#自学20一vs快捷键及调试
1、添加断点或取消断点:F9(或者点击代码行最左边的灰色行)2、调试:F10逐过程(不进入函数内部,直接获取函数运行结果)F11逐语句(会进入函数),如果想跳出函数按shift+F11,如果对某个函数的使用定义不清楚,按F12转到定义。3、按F5执行,如果调试中多个断点,按F5,执行到下一个断点4、出现黄色表示执行到该语句,但是该语句还没执行。 5、鼠标悬停,监视变量 鼠标悬停在变量上,可以监视变量的值。也可以点击右键添加监视,监视变量的值。还可以输入表达式改变或值,改变变量的值。添加原创 2020-10-03 09:39:52 · 585 阅读 · 0 评论 -
C#自学19一面向对象基础知识(二)
1、静态和非静态的区别1)、在非静态类中,既可以有实例成员,也可以有静态成员。2)、在调用实例成员的时候,需要使用对象名.实例成员;在调用静态成员的时候,需要使用类名.静态成员名;总结:静态成员必须使用类名去调用,而实例成员使用对象名调用。静态函数中,只能访问静态成员,不允许访问实例成员。实例函数中,既可以使用静态成员,也可以使用实例成员。静态类中只允许有静态成员,不允许出现实例成员。使用:1)、如果你想要你的类当做一个"工具类"去使用,这个时候可以考虑将类写成静态的。2)、静态类在整个原创 2020-09-08 19:53:36 · 231 阅读 · 0 评论 -
C#自学18一面向对象基础知识(一)
1、概念面向过程和面向对象的理解面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作。把大象塞进冰箱里1、打开冰箱门2、把大象塞进去,亲下大象的屁股3、关闭冰箱门面向对象:找个对象帮你做事儿。把大象塞进冰箱里我们把冰箱作为对象:1、冰箱门可以被打开2、大象可以被塞进冰箱里3、冰箱门可以被关闭面向对象:意在写出一个通用的代码,屏蔽差异。我们在代码中描述一个对象,通过描述这个对象的属性和方法对象必须是看得见摸得着的我们把这些具有相同属性和相同方法的对象进行进一步的封装原创 2020-09-07 19:25:21 · 189 阅读 · 0 评论 -
C#自学17一ArrayList类的使用
System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。System.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。ArrayList 类:使用大小可按需动态增加的数组。原创 2020-09-01 19:51:23 · 527 阅读 · 0 评论 -
C#自学16—方法
1、方法函数就是将一堆代码进行重用的一种机制。函数的语法:[public] static 返回值类型 方法名([参数列表]){方法体;}public:访问修饰符,公开的,公共的,哪都可以访问。static:静态的返回值类型:如果不需要写返回值,写void方法名:Pascal 每个单词的首字母都大些。其余字母小写参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。方法写好后,如果想要被执行,必须要在Main()函数中调用。方法的调用语法:类名.方法名原创 2020-08-31 15:48:59 · 179 阅读 · 0 评论 -
C#自学15一多线程的使用
CSharp中的多线程——使用多线程单元模式和Windows Forms单元是多线程的逻辑上的“容器”,单元产生两种容量——“单的”和“多的”。单线 程单元只包含一个线程;多线程单元可以包含任 何数量的线程。单线程模式更普遍 并且能与两者有互操作性。 就像包含线程一样,单元也包含对象,当对象在一个单元内被创建后,在它的生 命周期中它将一直存在在那,永远也“居家不 出”地与那些驻留线程在一起。在排它锁的控制中,任何线程可以访问在任何同步环境中的对象。但是单元内的对象只有单元内的线程才可以访问。想象一个图原创 2020-08-27 18:31:07 · 276 阅读 · 0 评论 -
C#自学14一进程和线程的概念
一:什么是进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。二:什么是线程线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发原创 2020-08-27 18:53:38 · 299 阅读 · 0 评论 -
C#自学13—数组知识点+冒泡排序
1、数组知识点一次性存储多个相同类型的变量。语法:数组类型[] 数组名=new 数组类型[数组长度];***数组的长度一旦固定了,就不能再被改变了数组保存多个值;几乎任意类型都可以声明数组;int[] nums = new int[3];int[] nums = {5,3,8};int[]nums=new int[3]{1,2,3};int[]nums=new int[]{2,3,5};数组的声明:以上四种int[] nums = new int[3]{5,3,8}//个数和声明数必须原创 2020-08-23 19:48:25 · 311 阅读 · 0 评论 -
C#自学12—常量+枚举及其与int,string转换+结构
1、常量声明的常量的语法:const 变量类型 变量名=值;static void Main(string[] args) { int number = 10; number = 20;//体现了变量可以被重新赋值 const int numberTwo = 50;//常量 不能够被重新赋值 //numberTwo = 90; }2、枚举语法:[public] en原创 2020-08-19 15:49:42 · 346 阅读 · 0 评论 -
C#自学11—总结(一)
1、变量类型int double string char bool decimal变量的使用规则:先声明再赋值最后使用int number;number=10;number=20;Console.WriteLine(number);2、Camel Pascal3、运算符赋值运算符:=复合赋值运算符:+= -= *= /= %= sum+=age; sum=sum+age;算数运算符: + - * / % ++ –关系运算符: > < >= <= == !原创 2020-08-19 15:49:10 · 227 阅读 · 0 评论 -
C#自学10—程序调试+break关键字+三元表达式+return关键字
**1、**程序调试1)、写完一段程序后,想看一下这段程序的执行过程。2)、当你写完这段程序后,发现,程序并没有按照你想象的样子去执行。调试方法:1)、F11逐语句调试(单步调试)2)、F10逐过程调试3)、断点调试 程序运行断点处,就不在向下执行了**2、**break1)、可以跳出switch-case结构。2)、可以跳出当前循环。break一般不单独的使用,而是跟着if判断一起使用,表示,当满足某些条件的时候,就不再循环了。...原创 2020-08-19 15:48:36 · 273 阅读 · 0 评论 -
C#自学09—循环结构:while循环+do-while循环+for循环
1、while循环:while(循环条件){循环体;}执行过程:程序运行到while处,首先判断while所带的小括号内的循环条件是否成立,如果成立的话,也就是返回一个true,则执行循环体,执行完一遍循环体后,再次回到循环条件进行判断,如果依然成立,则继续执行循环体,如果不成立,则跳出while循环。在while循环当中,一般总会有那么一行代码,能够改变循环条件,使之终有一天不再成立,如果没有那么一行代码能够改变循环条件,也就是循环条件永远都成立,我们称之这种循环叫做死循环。最简单的最常用的原创 2020-08-19 15:48:14 · 362 阅读 · 0 评论
分享