![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C# 基础
文章平均质量分 89
HawkJony
擅长:连续普通拳
展开
-
C#梳理【委托Delegate】
C# 委托(Delegate)C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。声明委托(Delegate)委托声明决定原创 2017-09-20 10:33:52 · 635 阅读 · 0 评论 -
C#梳理【属性Property】
C# 属性(Property)属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中的成员变量或方法称为 域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用 访问器(accessors) 让私有域的值可被读写或操作。属性(Property)不会确原创 2017-09-19 23:04:26 · 647 阅读 · 0 评论 -
C#梳理【结构体Struct】
C# 结构(Struct)在 C# 中,结构是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构。结构是用来代表一个记录。定义结构为了定义一个结构,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。例如,您可以按照如下的方式声明 Book 结构:s原创 2017-09-11 22:24:08 · 453 阅读 · 0 评论 -
C#梳理【字符串String】
在 C# 中,您可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量。string 关键字是 System.String 类的别名。创建 String 对象您可以使用以下方法之一来创建 string 对象:通过给 String 变量指定一个字符串通过使用 String 类构造函数通过使用字符串串联运算符( + )通过检索属性或原创 2017-09-11 17:38:40 · 752 阅读 · 1 评论 -
C#梳理【数组Array】
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。所有的数组都是由连续的内存位置组成的。声明数组在 C# 中声明一个数组,您可以使用下面的语法:datatype[] arrayName;例如:double[] balance;初始化数组声明一个数组不会在内存中初始化数组。当初始化数组变原创 2017-09-11 16:16:55 · 1447 阅读 · 0 评论 -
C#梳理【可空类型Nullable】
C# 可空类型(Nullable)C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。例如,Nullable,读作"可空的 Int32",可以被赋值为 -2,147,483,648 到 2,147,483,647 之间的任意值,也可以被赋值为 null 值。类似的,Nullable 变量可以被赋值原创 2017-09-11 15:25:37 · 1463 阅读 · 0 评论 -
C#梳理【参数传递】
参数传递当调用带有参数的方法时,您需要向方法传递参数。在 C# 中,有三种向方法传递参数的方式:方式描述值参数这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。引用参数这种方式复制参数的内存位置的引用给形式原创 2017-09-11 11:12:17 · 550 阅读 · 0 评论 -
C#梳理【正则表达式】
C# 正则表达式正则表达式 是一种匹配输入文本的模式。.Net 框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。定义正则表达式下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。字符转义字符类定位点分组构造限定符反向引用构造备用构造替换杂项构造字符类字符类与一组字符中原创 2017-09-17 15:46:44 · 329 阅读 · 0 评论 -
C#梳理【不安全代码】
C# 不安全代码当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。指针变量指针 是值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,您必须在使用指针存储其他变量地址之前声明指针。指针变量声明的一般形式为:type *var-name;以下是有效原创 2017-09-26 16:27:52 · 453 阅读 · 0 评论 -
C#梳理【文件的输入和输出】
C# 文件的输入与输出一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个 流。从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流 和 输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。C# I/O 类System.IO 命名空间有各种不同的类,用于执行各种文件原创 2017-09-17 09:54:23 · 851 阅读 · 0 评论 -
C#梳理【匿名方法Anonymous methods】
C# 匿名方法我们已经提到过,委托是用于引用与其具有相同标签的方法。换句话说,您可以使用委托对象调用可由委托引用的方法。匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。编写匿名方法的语法匿名方法是通原创 2017-09-25 10:56:49 · 563 阅读 · 0 评论 -
C#梳理【标识符和关键字】
标识符标识符是用来识别类、变量、函数或任何其它用户定义的项目。在 C# 中,类的命名必须遵循如下基本规则:标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。标识符中的第一个字符不能是数字。标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ' /原创 2017-09-02 16:40:51 · 1886 阅读 · 0 评论 -
C#梳理【程序编译和运行】
C# Hello World 实例一个 C# 程序主要包括以下部分:命名空间声明(Namespace declaration)一个 classClass 方法Class 属性一个 Main 方法语句(Statements)& 表达式(Expressions)注释让我们看一个可以打印出 "Hello World" 的简单的代码:using原创 2017-09-02 16:24:35 · 5706 阅读 · 0 评论 -
C#梳理【数据类型】
C# 数据类型在 C# 中,变量分为以下几种类型:值类型(Value types)引用类型(Reference types)指针类型(Pointer types)值类型(Value types)值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。值类型直接包含数据。比如 int、char、float,它原创 2017-09-03 11:17:16 · 397 阅读 · 3 评论 -
C#梳理【命名空间namespace】
C# 命名空间(Namespace)命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。定义命名空间命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:namespace namespace_name{ // 代码声明}为原创 2017-09-12 22:31:08 · 3184 阅读 · 1 评论 -
C#梳理【多态】
在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。静态多态性在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为:(1)函数重载(2)运算符重载原创 2017-09-12 17:12:52 · 444 阅读 · 0 评论 -
C#梳理【类的继承和Interface接口】
对象类是对一种事物的抽象,对象是类的实例。构成类的方法和变量成为类的成员。类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。类的默认访问标识符是 internal,成员的默认访问标识符是 private。C# 类的静态成员我们可以使用 static 关键字把类成员定义为静态的。当我们声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只原创 2017-09-12 14:40:11 · 5893 阅读 · 2 评论 -
C#梳理【反射Reflection】
C# 反射(Reflection)反射指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。优缺点优点:1、反射提高了程序的灵活性和原创 2017-09-28 15:10:07 · 611 阅读 · 0 评论 -
C#梳理【常量】
C# 常量常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。常量可以被当作常规的变量,只是它们的值在定义后不能被修改。整数常量整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。整数常量也可以有后缀,原创 2017-09-03 16:47:39 · 442 阅读 · 0 评论 -
C#梳理【特性Attribute】
C# 特性(Attribute)特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的原创 2017-09-28 14:34:19 · 319 阅读 · 1 评论 -
C#梳理【索引器Indexer】
C# 索引器(Indexer)索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。语法一维索引器的语法如下:element-type this[int index] { // get 访问器原创 2017-09-28 11:02:23 · 317 阅读 · 0 评论 -
C#梳理【枚举Enum】
C# 枚举(Enum)枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。C# 枚举是值数据类型。换句话说,枚举包含自己的值,且不能继承或传递继承。声明 enum 变量声明枚举的一般语法:enum { enumeration list };其中,enum_name 指定枚举的类型名称。enumeratio原创 2017-09-11 23:03:47 · 904 阅读 · 0 评论 -
C#梳理【类型转换的做法】
C# 类型转换类型转换从根本上说是把数据从一种类型转换为另一种类型。在 C# 中,类型转换有两种形式:隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。转换类型的范围大小和从原创 2017-09-03 12:04:37 · 617 阅读 · 1 评论 -
C#梳理【泛型Generic】
C# 泛型(Generic)泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。C#的泛型类似于C++的模板,您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。下面这个简单的实例将有助原创 2017-09-25 10:50:39 · 554 阅读 · 0 评论 -
C#装箱和拆箱(Boxing 和 UnBoxing)
1、什么是装箱和拆箱?简单来说: 装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。(网上广为流传) C#中值类型和引用类型的最终基类都是Object类型(它本身是一个引用类型)。也就是说,值类型也可以当做引用类型来处理。而这种机制的底层处理就是通过装箱和拆箱的方式来进行,利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与原创 2016-05-17 21:44:11 · 44685 阅读 · 12 评论 -
认识UML中类之间的依赖、关联、聚合、组合、泛化的关系
什么是类?将某类东西归纳在一起,可以成为一个类。类有很多种提炼角度,需要根据系统地目标、业务的场景,选取合适的角度对事物进行归纳。什么是类图?类图可能是UML中使用的最多的一种图。和其他图一样,类图的基本语法并不复杂,可能一两天就能掌握,但是真正做到灵活的使用类图,可能需呀多年的功力。类图是锻炼OOA(OO Analysis)和OOD(OO Design)思想的重要工具,有原创 2016-04-25 14:53:11 · 1409 阅读 · 0 评论 -
C# 中的委托和事件
文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量)。例如:委托类型 委托实例 = new 委托类型(方法名); 欢迎浏览本文的后续文章: C#中的委托和事件(续)引言委托 和 事件转载 2016-04-25 17:21:47 · 519 阅读 · 0 评论 -
C#Ref与Out的区别
ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。总结起来,他们有如下语法区别:1、ref传进去的参数必须在调用前初始化,out不必(如果out实参在函数调用之前已经初始化了,在函数内部还是不可见的,相当于屏蔽了out的初值) 即:int i;SomeMethod(原创 2016-04-20 15:44:34 · 7845 阅读 · 2 评论 -
C#详解值类型和引用类型区别
首先,什么是值类型,什么是引用类型?在C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。 引用类型原创 2016-04-20 17:59:42 · 98443 阅读 · 26 评论 -
C# 中 string.Empty、""、null的区别
一、string.Empty和""1、Empty是string类中的一个静态的只读字段,它是这样定义的:[csharp] view plain copy// Summary: // Represents the empty string. This field is read-only. public static转载 2016-04-21 10:02:27 · 1251 阅读 · 0 评论 -
C#可空类型
1 什么是可空类型?null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。C# 不允许把 null 赋给一个值类型的数据。在 C# 中,以下语句是非法的:int a = null; // 非法但是,利用 C# 定义的一个修饰符,可将一个变量声明为一个可空(nullable)值类型。可空值类型在行为上与普通值类型相似,但可以将一个 nu原创 2016-04-21 09:28:21 · 1807 阅读 · 0 评论 -
C#的Infinity和NaN
C#语言中,对于 int,long 和 decimal类型的数,任何数除以 0 所得的结果是无穷大,不在int,long 和 decimal 类型的范围之内,所以计算 6/0 之类的表达式会出错。 但是,double 和 float 类型实际上有一个可以表示无穷大的特殊值:5.0/0.0 = Infinity(无穷大),这个规则唯一的例外是0.0/0.0 = NaN (Not a Nu原创 2016-04-20 17:39:30 · 4193 阅读 · 0 评论 -
C#命名参数的使用
什么是命名参数?命名参数(Named Arguments)就是说在调用函数时可以通过指定参数名称的方式来调用参数。它最大的好处就是方便调用参数时按调用者的需要来排列顺序,而不必死守函数声明时的顺序,同时结合默认参数值的特性,可以选择使用默认参数还是不使用默认参数。先说命名参数的使用注意点:1.命名参数必须放在普通参数值的后面2.编译器会先调用使用命名参数的参数,原创 2016-04-20 17:17:41 · 1395 阅读 · 0 评论 -
C#静态方法的使用
1 静态方法内部不可调用非静态成员函数2 静态方法内部可以调用XX对象的非静态方法3待补充using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cash { class Program {原创 2016-04-20 16:45:26 · 1473 阅读 · 0 评论 -
写一段程序,找出数组中第k大小的数,输出数所在的位置。
基本上是利用排序思想,稍微改造以适应这种需求。比如最简单的冒泡排序,冒泡到第k次时就找到了这个数(需要提前缓存原始索引位置);快速排序的思想,把数组分割成大于和小于某值的两部分后,判断每部分的元素个数,然后递归分割,等等。下面这个代码是基于快排的思想:using System;namespace test01{ class Program { st原创 2016-05-17 15:18:22 · 3386 阅读 · 2 评论 -
C#不安全代码只会在使用 /unsafe 编译的情况下出现
习惯C++的童靴会经常与内存操作打交道,那么C#里面可以直接对内存进行直接操作吗?答案是可以哒,但是不推荐。用的时候需要加unsafe限制。我们在C#中允许unsafe编译,操作如下:好吧,是不是非常简单?下面写个简单例子 using System;namespace test01{ class Program {原创 2016-05-19 14:19:23 · 15920 阅读 · 0 评论 -
C#详解struct和class的区别
可以从数据类型、访问权限(封装)、继承、构造函数、实例化方面做比较3.struct 默认的访问权限是public,而class默认的访问权限是private.简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上。class是引用类型,创建一个class类型实例被分配在托管堆上。但struct和class的区别远不止这么简原创 2016-04-24 16:28:46 · 21022 阅读 · 0 评论 -
C#梳理【集合Collection】
C# 集合(Collection)集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中原创 2017-09-25 10:26:39 · 3339 阅读 · 0 评论 -
C#梳理【事件Event】
C# 事件(Event)事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。通过事件使用委托事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为发布器(publisher) 类。其他接受该原创 2017-09-25 09:58:24 · 1319 阅读 · 1 评论 -
C#梳理【异常处理】
C# 异常处理异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。原创 2017-09-16 11:32:18 · 5938 阅读 · 3 评论