代(Generation)是CLR垃圾收集器的一种机制,它存在的惟一目的就是提高应用程序性能,支持3代对象。
执行的原理是:第一次初始化后又添加新对象,如果第0代满了就会进行处理回收不用的对象,再把第0代中的对象放入第一代中,新对象放入第0代中。当第0代中的对象满时,把第0代和第一代都进行处理然后扔出第0代中不用的对象,把第0代中剩余的对象放入第一代中,直到三代都装满为止。
文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。文件操作有:Directory类、DirectoryInfo类、FileInfo类、File类、Path类。
Directory类的几种方法:Delect()有两个参数,若加true则删除指定目录并删除该目录中的任何子目录,不加true则删除指定目录。Move()要移动的文件或目录路径,两个参数第一个是要修改的文件路径和文件名,第二个是要移到的文件路径和文件名。Exists()有一个参数确定给定路径是否出现在磁盘上。GetFiles()返回指定目录的文件名。GetDirectories()返回指定目录的子文件夹名称。例如查找文件夹可以采用递归的方法:void DG (string path)
{ foreach(var str in Directory.GetDirectories(path))
{
Console.WriteLine(str);
DG(str);
}
}
I/O流:Stream、FileStream、StreamRead、StreamWrite
流涉及三个基本操作:
1.        可以读取流。读取是从流到数据结构(如字节数组)的数据传输。
2.        可以写入流。写入是从数据结构到流的数据传输。
3.        流可以支持查找。查找是对流内的当前位置进行查询和修改。查找功能取决于流具有的后备存储区类型。
使用 FileStream 类对文件系统上的文件进行读取、写入、打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream 对输入输出进行缓冲,从而提高性能。例如以下代码
static void Main(string[] args)
{string path1 = @"D:\demo\test1.txt";
FileStream fs1 = new FileStream(path1, FileMode.Open);//打开文件
Byte[] By_Arr1=new Byte[fs1.Length];
fs1.Read(By_Arr1,0,By_Arr1 .Length);
string path2 = @"D:\demo\test2.txt";
FileStream fs2 = new FileStream(path2, FileMode.Open);
Byte[] By_Arr2 = new Byte[fs2.Length];
fs2.Read(By_Arr2, 0, By_Arr2.Length);
fs2.SetLength(By_Arr1.Length + By_Arr2.Length);           
fs2.Write(By_Arr2 ,0,By_Arr2 .Length );
}
StreamReader 旨在以一种特定的编码输入字符,而Stream 类用于字节的输入和输出。使用 StreamReader 读取标准文本文件的各行信息。以下代码就可以读取文本信息
StreamReader sr = new StreamReader(@"D:\demo\test1.txt", Encoding.Default);
string str;
Console.WriteLine(str = sr.ReadToEnd());
sr.Close();
StreamWriter 旨在以一种特定的编码输出字符
StreamWriter sw = new StreamWriter(@"D:\demo\test2.txt", true, Encoding.Default);
sw.Write(str + "在这里增加新的内容");          
sw.Close();
泛型
泛型简单理解就是把类型当参数例如static void PrintType<T>(T i)
{
Console.WriteLine("类型:{0,-20}值:{1}",i.GetType (),i);
}
使用泛型时考虑使用 T 作为具有单个字母类型参数的类型的类型参数名。
将“T”作为描述性类型参数名的前缀。泛型有六种约束,使用where关键字。
约束
说明
T:结构
类型参数必须是值类型。可以指定除 以外的任何值类型。
T:类
类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
T:new()
类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。
T:<基类名>
类型参数必须是指定的基类或派生自指定的基类。
T:<接口名称>
类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
T:U
为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。
例如static void PrintType<T>(T i) where T: struct
{
Console.WriteLine("类型:{0,-20}值:{1}",i.GetType (),i);
}PrintType<int>(5); 
Tnew()
类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。
class Program
{
static void Main(string[] args)
{
PrintType<Demo>(new Demo());
}
static void PrintType<T>(T i) where T: new()
{
Console.WriteLine("类型:{0,-20}值:{1}",i.GetType (),i);
}    
}
class Demo
{       
}
反射是编程的读取与类型相关联的元数据的行为,命名空间为System.Reflection。
Assembly:表示一个程序集,提供了一个LoadFrom方法。用法:
Assembly SampleAssembly=Assembly.LoadFrom("c:\\abc.dll");
还可以使用txt文本,但要把abc.dll文件的信息写入txt文本
例如abc.dll文件的路径,命名空间和类方法等
下面举一个反射的例子
static void Main(string[] args)
{ string[] DllArr = File.ReadAllLines(@"E:\1.txt", Encoding.Default);// 把读出的文件内容放入到数组中
Assembly Ass = Assembly.LoadFile(DllArr[0]);//加载指定路径上的程序集文件内容
object myobj = Ass.CreateInstance(DllArr[1]);//搜索指定类型创建实例
Type mytype = Ass.GetType(DllArr[1]);//获取类型
MethodInfo mymethod = mytype.GetMethod(DllArr[2]);//获取方法信息
object[] objarr = new object[DllArr.Length - 3];//创建新数组比DllArr数组的长度小三
for (int i = 0; i < objarr.Length; i++)
{
objarr[i] = DllArr[i + 3];
}
mymethod.Invoke(myobj, objarr);//使用指定参数调用当前实例的方法或构造函数
}
反射调用构造函数例子,
static void Main(string[] args)
{BindingFlags bf = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;//
Type t = typeof(Demo_Class);//获取类的类型
ConstructorInfo Cons = t.GetConstructor(new Type[0]);//构造函数无参,所以构造函数无类型参数。如有参数则写(new Type[]{typeof(int)});
object Obj = Cons.Invoke(null);//传入的构造参数为空,得到对象,如有参数则写new object[] { 456 }
object[] MethodPar = new object[] { “a” }; //方法的参数
MethodInfo mi = t.GetMethod(“Method”, bf);//得到方法
Console.WriteLine(mi.Invoke(Obj, MethodPar));
}
Attribute:属性与程序实体关联后,即可在运行时使用名为“反射”的技术查询属性。
属性以两种形式出现:
1.    一种是在公共语言运行库(CLR) 中定义的属性。
2.    另一种是可以创建的用于向代码中添加附加信息的自定义属性。此信息可在以后以编程方式检索。
属性具有以下特点:
1.    属性可向程序中添加元数据。元数据是嵌入程序中的信息,如编译器指令或数据描述。
2.    程序可以使用反射检查自己的元数据。
3.    通常使用属性与COM 交互。
特性类实例化时需要放在括号“[ ]”中,语法:[attributeClass(定位参数1,… 命名参数1,…)]指定参数对应着特征类的实例公有域或实例属性,但它在实例化的时候并非必须,可以省略。位置参数和指定参数只可以为如下数据类型 :基本数据类型中的值类型:×××,浮点类型,字符, BoolSystem.object, System.Type,System.string
枚举类型,以上任何类型的一维数组。
有三个特殊的属性AttributeUsage、Conditional、Obsolete
条件方法必须是类或结构声明中的方法,而且必须具有void 返回类型。
#define TRACE_ON//这行标识代码决定着红色代码的执行与否。若注释它Msg方法不能执行
[Conditional("TRACE_ON")]
public static void Msg(string msg)
{ Console.WriteLine(msg); }
#if TRACE_ON
public static void Msg(string msg)
{Console.WriteLine(msg);}
#endif这是另一种用法
[System.Obsolete(“use class B”)] //类会被在实例化时警告过期
class A
{
public void Method() { }
}
class B
{
[System.Obsolete("use NewMethod", false )] //方法调用时提示信息
public void OldMethod() { }
[System.Obsolete("use NewMethod", true)] //不可编译
public void NewMethod() { }}
多线程
.NET用Thread创建并控制线程,设置做强先级并获取其状态。Start()表示线程运行,Priority()获取或设置一个值表示线程的优先级,Abort中止线程执行,Sleep使线程睡眠一段时间,方法的参数为睡眠的毫秒数
Monitor 类通过向单个线程授予对象锁来控制对对象的访问,Exit()释放锁,Enter()获得数据对象上的锁

转载于:https://blog.51cto.com/87cjl/369223

.Net Framework 总结相关推荐

  1. Tengine Framework基础

    Tengine Framework基础 最受开发者喜爱的边缘AI计算框架 Tengine是OPEN AI LAB推出的自主知识产权的边缘AI计算框架,致力于解决AIoT产业链碎片化问题,加速AI产业化 ...

  2. EF-Entity Framework 相关技术点收集贴

    不定期.偶尔.添加更新 在网络上看到或者自己开发过程中碰到的EF-Entity Framework相关技术点 本文地址:http://www.cnblogs.com/vnii/archive/2012 ...

  3. Qt Installer Framework实战

    Qt Installer Framework是Qt发布的安装程序支持框架,只需要简单的配置就可以生成安装文件,同时可以通过javascript脚本来定制安装过程. 目录结构 config packag ...

  4. 在虚拟机中 windows 2003 装.net framework 3.5 出现问题.

    错误信息: [11/27/09,08:52:50] Microsoft .NET Framework 2.0a: [2] Error: Installation failed for componen ...

  5. .Net Framework 3.0 概述

    Microsoft .NET Framework 3.0, the managed programming model for Microsoft® Windows®, includes the .N ...

  6. MIS开发中.net Framework的打印功能

    Microsoft .net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下. 打印操作通常包括以下四个功能 1 打印设置 ...

  7. python导入matplotlib出错_解决导入matplotlib的RuntimeError: Python is not installed as a framework....

    import matplotlib.pyplot as plt 报错: RuntimeError: Python is not installed as a framework. The Mac OS ...

  8. ios Standard Framework和Umbrella Framework

    Standard Framework:标准库,通过引用对应的header文件而不是引用master header 文件来引用类(也可以通过引用Master Header file来引用需要使用的类), ...

  9. ios .framework动态库重签名

    真机上运行.framework时,如果报 dyld'dyld_fatal_error:dyld: Library not loaded: @rpath/XX.framework/XXReference ...

  10. ios .a和.framework

    创建Aggregate来合并模拟器和真机通用的framework 然后在Build Phases下New Run Script Phase创建合并脚本: # Constants SF_TARGET_N ...

最新文章

  1. 【Shell脚本】逐行处理文本文件
  2. 小议数据库主键选取策略
  3. 小白学数据分析-----Excel制作INFOGRAPHIC
  4. mysql 重复字段查询及排除重复值
  5. python导出项目所依赖的所有的库文件以及安装
  6. git分支建立删除,打tag
  7. Python图片转html字符画
  8. Gambit 5.调试
  9. echarts 饼图 将数据显示在图例的旁边
  10. 【Java】代码加密
  11. spring AOP的配置
  12. mysql 合并两个update_如何将多条update语句合并为一条
  13. 低代码局中局:是IT革命还是高级外包? | 甲子光年
  14. 计算机里面有盐有糖O(∩_∩)O哈哈~
  15. 周末作业——循环练习题
  16. windows server 2016磁盘安全与管理_磁盘管理工具哪一款好用?
  17. 路人超能100手游如何用电脑玩 路人超能100PC电脑版玩法教程
  18. Quartus2_13.0初级使用教程
  19. 3D打印机硬件驱动-马林固件最新版本2.0.X中文注释(3)marlin 2.0.9.2 截至发稿时间2021年12月16日
  20. Poc/Exp漏洞验证利用脚本编写

热门文章

  1. python--元组:tuple
  2. Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
  3. ETL-informatica进阶资料整理
  4. [并发]线程池关闭的问题
  5. Apache服务器和tomcat服务器有什么区别(转)
  6. 存储过程中SELECT INTO的使用
  7. Windows 10 TH2改进
  8. Apache/MySQL/PHP 集体升级
  9. ORM的个人简单理解以及持久化和持久层的简单理解、Hibernate的简单理解,mybatis 的好处通俗易懂
  10. 霍夫曼编码 c语言程序,哈夫曼编码编码解码C语言程序.doc