![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#基础知识
文章平均质量分 58
Code Flying
这个作者很懒,什么都没留下…
展开
-
获取电脑软件的路径(C#)
需求碰到一个需求,要获取电脑上安装软件的安装路径或者卸载路径,在网上找了一圈,基本都是通过注册表查找计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ 这个项,然后根据应用名,后加后缀“.exe”来取得这个exe文件的路径,但是这就有一个问题,有部分软件无法通过这个来找到,比如说超图(SuperMap),程序已经在电脑上装上了,可是在对应的注册表项里面找不到。思路这时我就想到,通过卸载项来找到文件原创 2021-01-21 09:59:28 · 1863 阅读 · 1 评论 -
编码去0的方法(C#)
遇到了一个需求,要把“12000.00001.00010.00032.00100” ; “00145.00002.12005.07042” ;“05439.07008.02070” 这样的编码转换成“12000.1.10.32.100” ; “145.2.12005.7042” ;“5439.7008.2070” 这样的形式。分析乍一看这个需求并不难,只是简单的把0移除就行了,但是仔细思考一下,如果是简单的用Replace方法来做,那就会让10,100这样的数字变为1,所以得自己写一个方法。先考原创 2020-12-30 18:59:34 · 1842 阅读 · 9 评论 -
通过List创建TreeView(C#)
示例今天需要通过Excel来创建一个TreeView,并且建立相应的节点。我们先建一个自定义类,继承了IComparable接口,可以很方便的比较大小public class WbsNode : IComparable<WbsNode> { public string WBS { get; set; } public string TaskName { get; set; } //此处为比较WBS用,为后期做准备 pu原创 2020-12-28 17:55:51 · 1640 阅读 · 0 评论 -
Dictionary详解(C#)
Dictionary定义在C#中,Dictionary能提供快速的基于键值的元素查找。我们先来看一下源代码:public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable, ID原创 2020-12-23 16:04:40 · 6454 阅读 · 2 评论 -
StaticResource(静态资源)与DynamicResource(动态资源)(WPF)
一、资源(Resource)的定义资源是保存在可执行文件中的一种不可执行数据。在WPF的资源中,几乎可以包含图像、字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性。也就是说,应用程序中非程序代码的内容,比如点阵图、颜色、字型、动画/影片档以及字符串常量值,可将它们从程序中独立出来,单独包装成"资源(Resource)"。资源的范围(层级):WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上。WPF中,资源定义的位置决定了该资源的可用范原创 2020-11-18 19:01:34 · 3116 阅读 · 0 评论 -
用程序包管理器控制台管理项目的NuGet包
每个项目目录下都有自己的packages.config文件,它用来记录本项目所依赖的程序包,它是一个XML格式的文件,我们可以看下如下的一些内容当我们做项目迁移时,你的NuGet包可能会有丢失的现象,或者你的项目在迁移时没有复制packages这个包包目录,这时,我们可以通过命令将所有packages.config里的包包还原的指定的项目上.用NuGetPowerTools还原你的包包PM> Install-Package NuGetPowerTools //安装工具NuGetPowerToo原创 2020-11-18 10:24:48 · 384 阅读 · 0 评论 -
使用集合对象作为列表控件的ItemsSource(WPF)
ItemsSource定义WPF中的列表式控件们派生自 ItemsControl类,自然也就继承了 ItemsSource这个属性。ItemsSource属性可以接收一个 IEnumerable 接口派生类的实例作为自己的值(所有可被达代遍历的集合都实现了这个接口,包括数组、List等)。每个 ItemsControl的派生类都具有自己对应的条目容器( Item Container),例如, ListBox的条目容器是 ListBoxItem、 ComboBox的条目容器是ComboBoxItem. I原创 2020-11-17 10:39:52 · 3604 阅读 · 1 评论 -
XAML中 x:Name和Name的区别
x:Name的作用有两个:(1)告诉XAML编译器,当一个标签带有x:Name时除了为这个标签生成对应实例外还要为这个实例声明一个引用变量,变量名就是x:Name的值。(2)将XAML标签所对应对象的Name属性(如果有)也设为 x: Name的值,并把这个值注册到UI树上,以方便查找。先说结论:XAML中x:Name与Name并不完全等价。不是所有类型都可以使用Name,但是任何类型都可以使用x:Name。只有拥有Name属性,才可以在XAML中使用Name。不同于x:Name,因为这个是附原创 2020-11-03 16:30:24 · 1867 阅读 · 0 评论 -
理解Attribute和Property的区别(XAML)
这两个词的混滑由来已久。混淆的主要原因就是大多数中文译本里既把 Attribute译为“属性”,也把 Property译为“属性”。其实,这两个词所表达的不是一个层面上的东西。Property属于面向对象理论范畴。在使用面向对象思想编程的时候,常常需要对客观事物进行抽象,再把抽象出来的结果封装成类,类中用来表示事物状态的成员就是 Property。比如要写个模拟赛车的游戏,那么必不可少的就是对现实汽车的抽象。现实中的汽车身上会带有很多数据,但在游戏中可能只关心它的长度、宽度、高度、重量、速度等有限的几个数原创 2020-10-30 10:13:17 · 375 阅读 · 0 评论 -
查看浏览器保存的密码(傻瓜式教程)
我一般会使用浏览器保存自己的帐号和密码,下次登录就无需重新输入,非常方便。而像360这样的浏览器还提供了自动同步功能,让我一个360帐号,就带着互联网上所有帐号密码去旅行。 昨天我忽然在想,所有浏览器都说自己很安全,加密很到位,能够有效保证帐号密码的安全,但事实是否真的如宣传的那样靠谱? 简单一试,果然就发现了漏洞。IE、Chrome、QQ浏览器、360浏览器、搜狗浏览器……总之,我试验过的所有能够通过按“F12”调出开发者工具的浏览器,都有这个安全漏洞…现在进入正题,我们以360急速原创 2020-09-02 15:33:44 · 4304 阅读 · 0 评论 -
Margin属性详解(WPF)
margin属性代表该控件对于其他控件的距离例如 :margin=“10”代表此控件在上下左右任一方向对于其他控件的距离都为10像素;margin=“10,0”代表此控件在左右、上下两个方向对于其他控件的距离都为10像素;margin=“10,20,30,40”代表此控件在左上右下四个方向对于其他控件的距离分别为10,20,30,40像素。...原创 2020-11-16 19:46:03 · 3719 阅读 · 0 评论 -
Binding的数据转换(WPF)
数据转换(Data Convert)原理Binding还有另外一种机制称为数据转换( Data Convert),当 Source 端Path所关联的数据与 Target端目标属性数据类型不一致时,我们可以添加数据转换器( Data Converter)。前面的例子中我们都使用 Binding在 Slider控件与 Textbox控件之间建立关联 Slider控件作为 Source(Pah是 Value属性), Textbox控件作为 Target(目标属性为Text)。 Slider的 Value属性是原创 2020-11-17 09:57:09 · 1512 阅读 · 0 评论 -
List排序Sort和OrderBy方法(C#)
Sort和OrderBy的定义比较1、List.Sort()排序:Sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和堆排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择堆排序。说明: a. 使用Sort排序时,有可能原创 2020-11-15 18:21:51 · 34811 阅读 · 0 评论 -
C#参数类型总结
因为有4种参数类型,有时很难记住它们的不同特征。下表对它们做了总结,使之更易于比较和对照参数类型修饰符是否在声明时使用是否在调用时使用执行值类型无系统把实参的值复制到形参引用类型ref是是形参是实参的别名。输出类型out是是仅包含一个返回的值。形参是实参的别名。数组类型params是否允许传递可变数目的实参到方法...原创 2020-09-29 13:15:02 · 335 阅读 · 0 评论 -
C#参数详解五(参数数组)
参数数组前面所述的参数类型都必须严格地一个实参对应一个形参。参数数组则不同,它允许零个或多个实参对应一个特殊的形参。参数数组的重点如下:在一个参数列表中只能有一个参数数组。如果有,它必须是列表中的最后一个。由参数数组表示的所有参数都必须具有相同的类型。声明一个参数数组必须做的事如下:在数据类型前使用 params修饰符。在数据类型后放置一组空的方括号。下面的方法头展示了int型参数数组的声明语法。在这个示例中,形参 invasi可以代表零个或多个int实参。void ListIn原创 2020-09-29 13:07:39 · 2553 阅读 · 1 评论 -
C#参数详解四(输出参数)
输出参数用于从方法体内把数据传出到调用代码,它们的行为与引用参数非常类似。如同引用参数,输出参数有以下要求:必须在声明和调用中都使用修饰符。输出参数的修饰符是out而不是ref。和引用参数相似,实参必须是变量,而不能是其他类型的表达式。这是有道理的,因为方法需要内存位置保存返回值。例如,下面的代码声明了名称为MyMethod的方法,它带有单个输出参数。void MyMethod ( out int val )//方法声明{........(方法体)}...int y = 1;//实参变量原创 2020-09-28 17:48:50 · 3557 阅读 · 2 评论 -
C#参数详解三(引用类型作为值参数和引用参数)
对于一个引用类型对象,不管是将其作为值参数传递还是作为引用参数传递,我们都可以在方法成员内部修改它的成员。不过,我们并没有在方法内部设置形参本身。本节来看看在方法内设置引用类型形参时会发生什么将引用类型对象作为值参数传递 如果在方法内创建一个新对象并赋值给形参,将切断形参与实参之间的关联,并且在方法调用结束后,新对象也将不复存在。将引用类型对象作为引用参数传递 如果在方法内创建一个新对象并赋值给形参,在方法结束后该对象依然存在,并且是实参所引用的值。下面的代码展示了第一种情况:将引用类型对象作为值原创 2020-09-28 15:54:07 · 2027 阅读 · 0 评论 -
C#参数详解二(值参数和引用参数)
参数值参数参数有几种,各自以略微不同的方式从方法传入或传出数据。讲到现在的这种类型是默认的类型,称为值参数。使用值参数,通过将实参的值复制到形参的方式把数据传递给方法。方法被调用时,系统做如下操作:在栈中为形参分配空间。将实参的值复制给形参。值参数的实参不一定是变量。它可以是任何能计算成相应数据类型的表达式。例如,下面的方法中展示了两个方法调用。在第一个方法调用中,实参是double类型的变量;在第二个方法调用中,实参是计算成double的表达式。double func1 (double原创 2020-09-28 15:19:50 · 2267 阅读 · 0 评论 -
C#参数详解一(形参和实参)
参数详解参数形参实参值参数我们知道方法是可以被程序中很多地方调用的命名代码单元,它能把一个值返回给调用代码。返回一个值的确有用,但如果需要返回多个值呢?还有,能在方法开始执行的时候把数据传入方法也会有用。参数就是允许你做这两件事的特殊变量。参数形参形参是本地变量,它声明在方法的参数列表中,而不是在方法体中。下面的方法头展示了参数声明的语法。它声明了两个形参:一个int型,一个double型。public void PrintSum( int x, double y )//此处的xy就是形参的声明原创 2020-09-28 12:47:55 · 6466 阅读 · 0 评论 -
C#中this的几种作用
this关键字引用被访问成员所在的当前实例。静态成员函数没有this指针。this关键字可以用来从构造函数,实例方法和实例化访问器中访问成员。不能在静态方法。静态属性访问器或者域声明的变量初始化程序中使用this关键字,这将会产生错误。在类的构造函数中出现的this作为一个值类型表示对正在构造的对象本身的引用。在类的方法中出现this作为一个值类型表示对调用该方法的对象的引用。在结构的实例构造函数中出现的this作为一个变量类型,它表示对正在构造的方法的结构的引用。在实例方法中出现的this作为.原创 2020-09-23 16:32:54 · 2309 阅读 · 0 评论 -
C#静态变量、局部变量、全局变量、成员变量的区别及使用方法
局部变量:作用域在函数内部,函数执行结束,变量占用的内存会在垃圾回收机制中回收全局变量:作用域在整个类中项目中,使用前需要进行实例化,分配内存空间成员变量:定义在类中的变量静态变量:用statics修饰的变量,通过类名进行调用,不会随着类的多次实例而改变其值,只记录最后一次的值,静态函数只能调用静态变量,静态变量可以被静态函数、非静态函数调用因为C#中没有直接声明全局变量的方法,左移我们可以在一个类中实现静态属性(字段)和静态方法,以此达到C或C++中全局变量和全局函数的效果。public sta原创 2020-09-17 10:34:07 · 4922 阅读 · 0 评论 -
C#中静态方法和非静态方法(实例方法)的区别
C#的类中可以包含两种方法:C#静态方法与非静态方法。那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法。下面我们分四个方面来看看C#静态方法与非静态方法的差异:一、C#静态成员:静态成员属于类所有,非静态成员属于类的实例所有。每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;非静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。class X原创 2020-09-16 09:48:42 · 2361 阅读 · 0 评论 -
VisualStudio去掉代码中多余的空行 C#
Ctrl+H打开替换^\s*(?=\r?$)\n 替换程序中的空白行勾选使用正则表达式原创 2020-09-15 19:35:22 · 815 阅读 · 0 评论 -
C#中as和is的用法详解
C#中as和is的用法详解c#中类型的转换在c#中类型的转换分两种:显式和隐式基本的规则如下:基类对象转化为子类对象,必须显式转换,规则:(类型名) 对象。值类型和引用类型的转换采用装箱(boxing)或拆箱(unboxing)。基本类型互相之间转化可以用Covent类来实现。字符串类型转换为对应的基本类型用Parse方法,除了String类型外其他的类型都可以用Parse方法。...原创 2020-04-14 19:57:07 · 1977 阅读 · 0 评论 -
C#抽象成员、抽象类和抽象方法详解
抽象成员、抽象类和抽象方法详解抽象成员抽象类抽象类和抽象方法的示例抽象类的另一个例子抽象成员抽象成员是指设计为被覆写的函数成员。抽象成员有一下特征:必须是一个函数成员。也就是说,字段和常量不能为抽象成员。必须用abstract修饰符标记。不能有实现代码块。抽象成员的代码用分号表示。例如,下面取自一个类定义的代码声明了两个抽象成员:一个名称为PrintStuff的抽象方法和一个名称为M...原创 2020-04-12 10:07:49 · 2023 阅读 · 0 评论 -
栈和堆的底层区别
栈和堆栈和堆栈堆栈和堆程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方、以及如何存储都因爱与该数据项的类型。运行中的程序使用两个内存区域来进行存储数据:栈和堆。栈栈是一个内存数组,是一个LIFO(Last-In Fist-Out,后进先出)的数据结构。栈存储几种类型的数据:某些类型变量的值;程序当前的执行环境;传递给方法的参数;系统管理所有的栈操...原创 2020-04-11 20:25:28 · 591 阅读 · 0 评论