一、序列化和反系列化
序列化:就是将对象转换为二进制
反序列化:就是将二进制转换为对象
作用:传输数据。
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。
.NET框架提供了两种串行化的方式:
1、是使用BinaryFormatter进行串行化;2、使用SoapFormatter进行串行化;3、使用XmlSerializer进行串行化。
第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,而第二种将数据流格式化为XML存储;第三种其实和第二种差不多也是XML的格式存储,只不过比第二种的XML格式要简化很多(去掉了SOAP特有的额外信息)。
可以使用[Serializable]属性将类标志为可序列化的。如果某个类的元素不想被序列化,1、2可以使用[NonSerialized]属性来标志,2、可以使用[XmlIgnore]来标志。
1、使用BinaryFormatter进行串行化
下面是一个可串行化的类:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
/// <summary>
/// ClassToSerialize 的摘要说明
/// </summary>
[Serializable]
public class ClassToSerialize
{
public int id = 100;
public string name = "Name";
[NonSerialized]
public string Sex = "男";
}
下面是串行化和反串行化的方法:
public void SerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Create);
//开始序列化对象
BinaryFormatter b = new BinaryFormatter();
b.Serialize(fileStream, c);
fileStream.Close();
}
//反序列化成对象
public void DeSerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
c.Sex = "kkkk";
FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter b = new BinaryFormatter();
c = b.Deserialize(fileStream) as ClassToSerialize;
Response.Write(c.name);
Response.Write(c.Sex);
fileStream.Close();
}
调用上述两个方法就可以看到串行化的结果:Sex属性因为被标志为[NonSerialized],故其值总是为null。
转载:https://blog.csdn.net/yunhaiC/article/details/8584292
二、自动属性和普通属性
//普通属性
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// 自动属性
/// </summary>
public int Age
{
get;
set;
}
以上代码,普通属性和自动属性结果都一样,只是语法各异。自动属性更简便
- 自动实现的属性必须同时声明 get和 set 访问器。创建 readonly自动实现属性时,需要将set访问器设置为private 。
- 自动实现的属性上可以使用特性,不能用在支持后备字段上。如果属性的后备字段上使用特性,则应该只创建常规属性。
- 自动实现属性get,和set中不能包含特殊的逻辑处理。与字段类似,但不同于字段。与字段不同,属性不作为变量来分类,不能将属性作为 ref参数或 out参数传递。
三、Directory类
Directory 操作文件夹
CreateDirectory 创建文件夹
//创建文件夹
Directory.CreateDirectory(@"C:\a");
Delete 删除文件夹
//删除文件夹
Directory.Delete(@"C:\a",true);//有true表示无论是否为空文件夹都删除,无true则非空文件夹不能删除
Move 剪切文件夹
//剪切文件夹
Directory.Move(@"c:\a", @"C:\Users\SpringRain\Desktop\new");
Exist 判断是否存在
//判断指定的文件夹是否存在
if (Directory.Exists(@"C:\a\b"))
{
for (int i = 0; i < 100; i++)
{
Directory.CreateDirectory(@"C:\a\b\" + i);
}
}
GetFiles 获得指定的目录下所有文件的全路径
//获得指定文件夹下所有文件的全路径
string[] path = Directory.GetFiles(@"C:\Users\SpringRain\Desktop\Picture","*.jpg");
for (int i = 0; i < path.Length; i++)
{
Console.WriteLine(path[i]);
}
GetDirectory 获得指定目录下所有文件夹的全路径
//获得指定目录下所有文件夹的全路径
string[] path = Directory.GetDirectories(@"C:\Users\SpringRain\Desktop\new");
for (int i = 0; i < path.Length; i++)
{
Console.WriteLine(path[i]);
}
四、进程和线程
1、进程
进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。进程可以理解为一个程序的基本边界。是应用程序的一个运行例程,是应用程序的一次动态执行过程。
命名空间
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _15进程
{
class Program
{
static void Main(string[] args)
{
//获得当前程序中所有正在运行的进程
//Process[] pros = Process.GetProcesses();
//foreach (var item in pros)
//{
// //不试的不是爷们
// //item.Kill();
// Console.WriteLine(item);
//}
//通过进程打开一些应用程序
//Process.Start("calc");//打开计算器
//Process.Start("mspaint");//打开画图工具
//Process.Start("notepad");//打开记事本
//Process.Start("iexplore", "http://www.baidu.com");//打开百度
//通过一个进程打开指定的文件
ProcessStartInfo psi = new ProcessStartInfo(@"C:\Users\SpringRain\Desktop\1.exe");
//第一:创建进程对象
Process p = new Process();
p.StartInfo = psi;
p.Start();
// p.star
Console.ReadKey();
}
}
}