.NET常用类库知识总结

常用类库之.NET中的字符串

字符串的特性

1.不可变性
       由于字符串是不可变的的,每次修改字符串,都是创建了一个单独字符串副本(拷贝了一个字符串副本)。之所以发生改变只是因为指向了一块新的地址。
 
2.字符串池(只针对字符串常量)
      当一个程序中有多个相同的字符串常量时,多个变量指向的是内存中同一块字符串!这个特性叫字符串池。之所以字符串,不会造成程序混乱,是因为字符串的不可变性。
 

String的成员方法和属性

PS:这里重载方式很多,不一一列举。

1.Contains(String str)  判断字符串中是否包含,指定字符串。

    用法

      string str ="helloworld";

      str.Contains("hello");   //true 

2.StartsWith(String str)    

          判断字符串对象是否以,指定字符串开头。

3.EndWith(String str)

         判断字符串对象是否以,指定字符串结尾。

4.Length 属性

         获取字符串的长度

5.IndexOf(String str) 

         获取指定字符/字符串.....在对象字符串中第一次出现的位置。

6.LastIndexOf(String str)

         获取指定字符/字符串....在对象字符串中最后一次 出现的位置。

7.SubString(int start)

   SubString(int strat, int length)   从指定位置,截取字符串。

8.ToLower()

        将串转换成小写,返回一个新的全小写的字符串。

9.ToUpper()

       将串转换成大写,返回一个新的全大写的字符串。

10. Replace(string oldStr,string newStr)

        用新的字符串,替换对象字符串中老的字符串部分。

11.Trim()   去掉对象字符串两端的空格

        TrimStart() 去掉对象字符串 开头的空格

        TrimEnd()  去掉对象字符串  结尾的空格

        PS:如果想去掉其他的开头结尾的其他字符其他的字符,可以采用Trim()的其他重载。

12.Split()     把对象字符串,按照指定字符分割成一个字符串数组!

     Split()    的重载同样很多,

     例如 Split(new char[]{'|'}, StringSplitOption.RemoveEmptyEntries)// 删除空数据

String的静态方法

1.IsNullOrEmpty(string)

       //string.IsNullOrEmpty(str1) 判断某字符串是否为null,或者为空字符串。

2.Equals(string,string,StringComparison.OrdianlIgnore)
        忽略大小写比较两个字符串是否相同。
3.Join(string,string[])
        把一个数组按照指定字符串,拼接成一个字符串。
.NET中的计时器控件Timer

本章借介绍一些粗浅的Timer控件使用方法。

介绍Timer控件的常用属性和事件

1. Interval 属性表示 Timer控件的时间间隔。

    类型是int默认是毫秒。

2. Enabled 属性 表示Timer控件是否激活。

如果激活的话,一进入Timer的Tick事件就开始执行。所以默认是false

3. Start() 方法

    开始执行

4. Stop() 方法

    停止执行

5. Tick  事件

    表示Timer控件将要执行的代码。

常规使用方式

1.添加一个Timer控件

2.设置好必要的属性后。直接写 timer_Tick事件。在事件中写个停止条件就好了。

使用Lambda表达式调用Timer

Timer timer = new Timer();

timer.Interval = 100;

//使用Lambda表达式

timer.Tick += (sender,e) =>

{

     if (巴拉巴拉巴拉)

        {                   

          timer.Stop();

        }

};

timer.Start();

 

.NET中的StringBuilder

为什么要使用StringBuilder

为什么使用StringBuilder要从string对象的特性说起。

string对象在进行字符串拼接时,因为字符串的不可变性,string对象会每次拼接,都会复制一个副本出来进行运算,而本身的串仍然留在内存中,大量的临时片段会造成不可忽视的性能损耗。所以在进行大量的字符串拼接时建议使用StringBuilder

 

StringBuilder的简单使用方式

string s1 = "33";

string s2 = "44";

string s3 = "55";  //需求是把  s1 s2 s3拼接在一起。这是一种典型的字符串拼接。

//使用StringBuilder ,不会产生无用的临时字符串。

StringBuilder sb =new StringBuilder();

//拼接方式一

sb.Append(s1);

sb.Append(s2);

sb.Append(s3);

//拼接方式二      

//因为Append()方法会返回一个this,也就是对象本身。所以可以使用这种方式。

//链式编程  Jquery中常用这种方式

sb.Append(s1).Append(s2).Append(s3); 

//最后把sb.ToString()一下就好了。

PS:AppendLine()方法可以 自动添加一个回车。

 
.NET 中的DateTime

DateTime简介

DateTime是.NET中的时间类型,可以通过DateTime完成诸如 获取当前的系统时间等操作。
DateTime在.NET中是一个结构体,而并不是一个类。
clipboard 

如上图所示,clipboard[1]这个图标在VS中 表示结构体。

DateTime的常用方法和成员

1.Now
获取当前系统时间。格式如下图

clipboard[2]    

2.Today
获取当前今日日期。格式如下图

clipboard[3]

3.年 月 日 时 分 秒
接下来的几个对象,必须通过
DateTime.Now(或者DateTime.Today)再点才能引用的到。
  Year      获取年       Hour      获取小时
  Month  获取月       Minute  获取分钟
  Day      获取日        Second  获取秒

//以Year为例:DataTime.Now.Year

4.DayOfWeek、DayOfYear
获取当前日期是星期几  

以及获取当前日期是一年中的第几天

5.TryParse()
判断是否是时间类型,参数中有一个out可以输出一个DateTime对象。

6.AddDays()、AddHours() 

在当前时间基础上加几天  返回 一个DateTime
在当前日期基础上加几个小时  返回一个DateTime
7.Subtract(DateTime.Now)

比较两个时间的 时间差   返回一个TimeSpan

日期时间格式字符 ToString()

预定义模式
DateTime date =DateTime.Now;
date.ToString(
format
  参数
format格式详细用法
格式字符 关联属性/说明
d ShortDatePattern
D LongDatePattern
f 完整日期和时间(长日期和短时间)
F FullDateTimePattern(长日期和长时间)
g 常规(短日期和短时间)
G 常规(短日期和长时间)
m、M MonthDayPattern
r、R RFC1123Pattern
s 使用当地时间的 SortableDateTimePattern(基于 ISO 8601)
t ShortTimePattern
T LongTimePattern
u UniversalSortableDateTimePattern 用于显示通用时间的格式
U 使用通用时间的完整日期和时间(长日期和长时间)

y、Y YearMonthPattern

自定义模式
 
d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。
ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
dddd 周中某天的完整名称,在 DayNames 中定义。
M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。
MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。
MMMM 月份的完整名称,在 MonthNames 中定义。
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
yyyy 包括纪元的四位数的年份。
gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h 12 小时制的小时。一位数的小时数没有前导零。
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。
HH 24 小时制的小时。一位数的小时数有前导零。
m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。
s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有一个前导零。

 

.NET中的异常和异常处理

.NET中的异常(Exception)

.net中的中异常的父类是Exception,大多数异常一般继承自Exception。

可以通过编写一个继承自Exception的类的方式,自定义异常类!

异常处理机制

Try

{

    可能发生异常的代码

    后续代码     

}

Try以外的代码

catch(Exception e)

{

}

finally

{

}

上述代码描述如下

1.谁能执行 在异常处理中,一旦try里面有了问题,程序会放弃异常的后续代码直接跳到catch中。

执行完了catch中的代码,继续执行Try以外的代码

2.关于catch()中的参数e

e就是发生异常的异常类对象,可以任意取名。不是必须叫e的。

3.只抛一个

一块try中的代码只能抛出一个异常。

为什么呢?

因为一旦异常就抛出了啊,后面有也不执行了呀!

4.获取信息

可以通过 e.Message获取异常信息

5.必须执行

finally  无论如何都会执行

6.可以没有catch

可以只有 try catch

也可以只有try  finally

优秀的异常处理作风

1.不要逃避问题不要只把异常catch住,什么都不做,或者只是打印一下,这不是优秀的“异常处理”作风。

不知道怎么处理异常,就不要catch。让他暴露出来。既然发生异常了,问题就肯定是有的,逃避不是办法,直面他,才能解决他。尤其在分层的项目中。会让程序陷入深度的逻辑混乱状态。而问题被藏起来了,你甚至不知道哪里发生了问题。

2.如果真的遇到乱try、catch的程序员怎么办?

vs很强大,它想到了这种情况。点击【调试】【异常】进入这样一个工具,选中第二行 的引发选项。

clipboard[4]

这样在调试的时候,无论是否try  catch都会暴漏出异常。我们想要的信息就找到了。

 

 

.NET中的IO操作基础介绍

关于IO简介

.NET中的IO操作,经常需要调用一下几个类。

clipboard[5]
 

1.FileStream类       

        文件流类,负责大文件的拷贝,读写。

2.Path类                  

        Path类中方法,基本都是对字符串(文件名)的操作,与实际文件没多大关系。

3.File类           

      File类可以进行一些对小文件拷贝、剪切操作,还能读一些文档文件。

4.Dirctory            

      目录操作,创建文件、删除目录,获取目录下文件名等等。

Path类

1.ChangeExtension(path,".jpg")

改变文件后缀名!

2.Combine(s1,s2)

将两个路径连起来

3.获取文件名的几个方法 

1)Path.GetFileName(s1);   //获取路径中的文件名

2)Path.GetFileNameWithoutExtension(s1);   //获取文件名,不包括后缀名!

3)Path.GetDirectoryName(s1)//获取路径中的目录不包括文件名。

4)Path.GetExtension(s1);  //只获取扩展名

4.GetFullPath("")

获取完整路径,根据相对路径获得绝对路径。

5.临时目录 

1)GetTempPath()     //获取当前用户的临时目录

2)GetTempFileName()    //获取一个随机的文件名,并在临时目录下创建这个文件。

3)GetRandomFileName()   //仅获取一个随机文件名。

Directory类

1.创建目录

Directory.CreateDirectory(@"目录");

2.判断某个目录是否存在某文件

string path =@"路径";

if(Directory.Exists(path))

{

}

3.删除目录

1)Directory.Delete(path); //删除空目录  ,目录下没有文件了。

2)Directory.Delete(path,true); //不管空不空,都删!

3)如果没有目录就会报异常,最好用if(Directory.Exists(path))判断一下。

4.移动文件目录

重命名目录也用这个来做。

Directory.Move(@"c:\a",@"c:\abc");

5.DirectoryInfo

可以把文件夹当作对象来使用

DirectoryInfo dirInfo = new DirectoryInfo(@"path");

6.获取当前目录下的所有直接子目录 和 直接子文件

//获取目录下的直接子目录

String[] dirs =Direcotory.GetDirectories(@"目录");

//获取目录下的直接子文件

String[] files =Directory.GetFiles(@"目录");

7.获取当前目录下的目录和文件  另一种方式

//获取目录下的直接子目录

//String[] dirs =Direcotory.GetDirectories(@"目录");

//获取目录下的直接子文件

//String[] files =Directory.GetFiles(@"目录");

//—————————以上是6中的做法,他有一定性能上的问题。什么问题呢?—————————————

使用String[] dirs =Direcotory.GetDirectories(@"目录");是必须要等获取了整个string之后,才能遍历这个集合。

如果希望,读到一条处理一条。

建议使用Directory.EnumerateFile()

1)EnumerateFile返回的是一个实现了IEnumerable接口的集合。实际上使用了迭代器模式。

2)SearchOption.ALLDirctories参数,会让.EnumerateFile()遍历所有子目录下的文件。

File类

1.拷贝

File.Copy("Source"," Target",true);

2.判断是否存在 

File.Exists(@"Source") ;

3.剪切 

File.Move("Source","Targe");

4.创建 

File.Create("path");

5.删除 

File.Delete("path"); //删除,若没有,不报错!

6.读操作 

1)File.ReadAllLines("path",Encoding.Default);   //返回一个string[]

2)File.ReadAllTest("path",Encoding.Default);    //string

3)File.ReadAllBytes("path");

7.写操作 

1)File.WriteAllLines("path",new string[4],Encoding.Default);//按行写入一个文件中。

2)File.WriteAllText("path","string");

3)File.WriteAllBytes("path",new byte[4]);

4)File.AppendAllText();   //将string追加到文件中。

8.返回FileStream的快捷方式 

1)File.Open(string,FileMode);   //返回一个FileStream

2)File.OpenRead(string,FileMode);  //返回一个只读的 FileStream

3)File.OpenWrite(string,FileMode);  //返回一个只写的 FileStream

 

 

.NET中的IO操作之文件流

读操作

//1.创建文件流

FileStream fsRead =new FileStream("1.txt",FileMode.Open);

//2.创建缓冲区,正常情况下,是不会直接等于文件大小的。这里只有读,所以就这么干了。

byte[] bytes =new byte[fsRead.Length];

//3.开始读取, 返回值是读取到的长度。

int r =fsRead.Read(bytes,0,bytes.Lenght);

//4.关闭释放流

fsRead.Close();

fsRead.Dispose();

写操作

//1.创建写入的文件流

FileStream fsWrite fsWrite =new FileStream(@"xxx",FileMode.OpenOrCreate);

//2.创建缓冲区

String msg ="HelloWorld";

byte[] bytes =Enconding.UTF8.GetBytes(msg);

//3.开始写入

fsWrite.Write(bytes,0,bytes.Length);

//4.关闭

fsWrite.Close();

fsWrite.Dispose();

byte数组与string之间的转换

/*在文件流写入的时候,经常需要string 和 byte数组之间的转换。

   这里简单的描述一下,这方面的做法。*/

1.string 到 byte[]数组。

string msg ="HelloWorld";

//使用UTF8编码

byte[] bytes =System.Text.Encoding.UTF8.GetByte(msg);

//使用系统默认编码

byte[] bytes =System.Text.Encoding.Default.GetByte(msg);

 

2.byte[]到string

string newMsg =System.Text.Encoding.UTF8.GetString(bytes);

编码问题

为什么中文会乱码?

UTF8 编码中,一个中文字符占用两个字节。

GBK  编码中,一个中文字符占用三个字节。

UTF8 编码中,用两个字节保存一个汉字,如果你用GBK读取,按照三个字节一个字的格式去读。当然乱码了。反之也是一样的。

总结起来,无论是36码的鞋子,穿在50码的脚丫子上。还是36码的脚丫子,穿50码的鞋。看起来都不会很舒服。

所以,按照什么格式写入,就按照什么格式读取。才是正解。

 

PS:1.Utf8是国际标准。

     2.GB2312  是国标编码,支持中文的。

     3.GBK是对GB2312的扩展,支持繁体中文。

什么类可以Dispose( )?

1.Dispose()表示释放资源,.NET中对Dispose()有一个统一的约定或者叫描述。这个约定表现为一个接口。

或者说这个接口,是一个红头文件,红头文件中约定了如何释放资源。

所有实现了IDisposable接口的类都可以释放,可以Dispose();

那么类库中什么样的类会实现IDisposable接口呢?

我的理解是这样的,一般仅占用托管堆中内存资源的类或对象。一般不需要Dispose()。垃圾回收就搞定了。

但是对于,文件句柄,网络端口号,数据库连接等,CLR的垃圾回收机制是不管的。

所以一般这部分内容需要实现IDisposable接口。

文件流操作的异常处理

//只有把fs定义在这里,finally中才能引用得到。

FileStream fs =null;

try

{

     fs =new FileStream(@"文件路径",FileMode.Create);

     byte[] bytes = Encoding.Default.GetBytes("HelloWorld");

     fs.Write(bytes,0,byte.Length);

}

finally

{

     if(fs != null)  //如果fs未赋值,那么直接Dispose就会引发空指针异常。

     {

         fs.Dispose();

     }

}


简化上述的写法,虽然严谨但是稍微有点麻烦。Microsoft提供了语法糖。
就是using的语法
using(某个可以释放资源的类)
{
      操作
}
//1.操作执行完,会自动释放。
//2.using语句编译完成以后,会形成跟上面类似的代码。就是使用try  finally。

StreamWriter和StreamReader

//按行写入

StreamWriter sw =new StreamWriter(@"target",true,Encoding.GetEnconding("GB2312"));

sw.WriteLine("HelloWorld");

//按行读取

StreamReader sr =new StreamReader(@"Source");

sr.ReaderLine();  //每次返回一个字符串

 

 

 

转载于:https://www.cnblogs.com/mcad/p/4203746.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Framework 4.0 常用类库参考手册 [微软官方 MSDN] MSDN Library - .NET Framework 4.0 - 命名空间 (节选版) 制作成了chm格式,方便离线状态下学习! ======================================= 原文地址:http://msdn.microsoft.com/zh-cn/library/ms229335.aspx ======================================= .NET Framework 类库 - 命名空间 (节选版) Microsoft.Win32 提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。 System 包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性和处理异常的基础类和基类。其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。 System.Collections 包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。 System.Data 包含组成大部分 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。 System.Data.Common 包含由 .NET Framework 数据提供程序共享的类。.NET Framework 数据提供程序描述用于在托管空间中访问数据源(如数据库)的类的集合。 System.Data.Linq 包含支持在 LINQ to SQL 应用程序中与关系数据库进行交互的类。 System.Data.Linq.Mapping 包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。 System.Data.Mapping 提供用于存储数据映射信息的类型。 System.Data.Metadata.Edm 包含一组类型,这些类型表示模型中由实体框架使用的概念,以及一组帮助应用程序使用元数据的类。 System.Data.Objects 包含可访问对象服务的核心功能的类。 System.Data.Objects.DataClasses 包含以下这些类:Entity Data Model (EDM) 中定义的类型的基类、由导航属性返回的类型的基类,以及用于定义将公共语言运行时 (CLR) 对象映射到概念模型中类型的特性的类。 System.Data.Sql 包含支持特定于 SQL Server 的功能的类。此类的 API 扩展已添加到 SQL Server 的 .NET Framework 数据提供程序 ( System.Data.SqlClient) 中。 System.Data.SqlClient 包含封装 SQL Server .NET Framework 数据提供程序的类。SQL Server .NET Framework 数据提供程序描述了用于在托管空间中访问 SQL Server 数据库的类集合。 System.IO 包含允许对数据流和文件进行同步和异步读写的类型。 System.Linq 包含支持使用语言集成查询 (LINQ) 的查询的类和接口。 System.Web 提供启用浏览器/服务器通信的类和接口。 ……

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值