![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
文章平均质量分 74
lastBeachhead
最后的据点。
展开
-
在C#中内存的回收
用了.Net工具来写程序的人,不难发现它有个好处,就是使用的内存不用释放,尤其在使用C#或者VB.Net来写程序,因为程序所占用的内存都是受系统托管的,因此内存的释放不需要程序员去操心。 很多人从C语言或者C++等等语言转型过来,对于这一点往往很不适应,例如定义一个数组或者去new一个对象的时候,都习惯在使用完毕后用Delete语句去释放它,然而在C#中没有提供类似的语句转载 2008-11-10 22:57:00 · 3630 阅读 · 0 评论 -
运行时如何使用元数据
为了更好的理解元数据及其它在CLR中所扮演的角色,自己动手编写代码并且演示元数据是怎么影响CLR是最好的方法。接下来有一个例子,在MyApp中定义了2个方法,Main函数是程序的入口点,Add方法接收两个int数,返回这两个整形数的和。using System; public class MyApp{ public static int Main() { int Val翻译 2008-11-26 19:04:00 · 1183 阅读 · 0 评论 -
元数据与PE文件结构
元数据被存储在PE文件的一个区域,MSIL则被存储在PE文件的另一个区域。元数据部分包含一系列的表和堆。MSIL部分则包含IL语言和元数据标记,这些元数据标记指向元数据部分的某个表的某行或者指向某个堆。 元数据表和堆 元数据表中包含程序的各种信息,比如,某个表描述程序中的各个类,另外一个表描述各个类中的字段等等。如果你的代码里有10个类,那么类表中就会有10行,每一行对应一个类翻译 2008-11-28 10:17:00 · 939 阅读 · 0 评论 -
new、vitual、override之间那点事
1)第一种情况:子类某个方法使用new修饰,但父类中并没有该方法。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace NewVituslOverride{ public class Father { public void Say(原创 2008-11-28 14:09:00 · 1520 阅读 · 0 评论 -
c#委托、事件理解
什么是委托? 委托和事件这两个概念是完全配合的。委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数。 每一个委托都有自己的签名,例如:Delegate int SomeDelegate(string s, bool b);是一个委托申明,在这里,提及的签名,就是说SomeDelegate转载 2008-12-12 19:00:00 · 780 阅读 · 0 评论 -
从头到尾看委托
目录委托介绍何处定义委托?委托既可以封装静态方法,也可以封装实例方法,还可以封装匿名方法处理发布、订阅关系的几种方式委托本质为什么即有Delegate类,又有MulticastDelegate类,这两个类有什么区别?委托判等获取委托链中各个委托的返回值 委托介绍(返回目录) 安全性: 委托相对于其它语言的回调函数,最转载 2008-12-16 22:18:00 · 1329 阅读 · 0 评论 -
C#入门代码小示例
一、从控制台读取东西代码片断:using System;class TestReadConsole{ public static void Main() { Console.Write(Enter your name:); string strName = Console.ReadLine(); Console.WriteLine( Hi +转载 2008-12-18 00:35:00 · 879 阅读 · 0 评论 -
使用c#给outlook添加任务、发送邮件
c#在使用outlook提供的一些API时,需要将outlook相关的com引用到项目中。 具体方法就是用vs打开工程后,在工程上添加引用,在com选项卡上,选择Microsoft Outlook 12.0 Object Library,如果安装的不是outlook2007,则对应com的版本不一样。注意下面描述的方法是在命令行模式或者winform模式下的,不是web模式下的。 在web原创 2008-12-23 18:33:00 · 4971 阅读 · 1 评论 -
不管是搞c#还是搞java,都应该搞懂的一些问题
对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样转载 2009-03-10 19:23:00 · 863 阅读 · 0 评论 -
再谈Server.Transfer,Response.Redirect的区别
使用HttpContext.RewritePath来配合Server.Transfer/Execute 有不少人都懂得在Applicaton_Start等事件中使用HttpContext.RewritePath来改变HttpHandler。 如果在Server.Transfer/Execute的调用前,使用RewritePath,更可以起到指定QueryString的效果。转载 2009-03-12 22:10:00 · 1043 阅读 · 0 评论 -
ASP.NET跨页面传值技巧总结
1.使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:a.aspx.cs的C#代码view plaincopy to clipboardprint?p原创 2009-03-12 21:46:00 · 628 阅读 · 0 评论 -
关于泛型
泛型是 C#2.0 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NETFramework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作. 使用泛型类型可以最大限度地重用代码、保原创 2009-03-12 16:51:00 · 713 阅读 · 0 评论 -
Server.Transfer,Response.Redirect的区别
如果你读过很多行业杂志和 ASP.NET 示例,你会发现,大多数人使用 Response.Redirect 将用户引导到另一个页面,而另一些人好像偏爱于神秘的 Server.Transfer,那么,这二者有什么区别? Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面。你可以使用下面的代码将用户引导到另一个页面: Response.Re转载 2009-03-12 22:06:00 · 655 阅读 · 0 评论 -
Server.Transfer()之后并获取之前页面内容的一个例子
a.aspx页面前台: a.aspx页面后台:using System;using System.Collections.Generic;using System.Linq;using System.Web;using Sys原创 2009-03-12 22:19:00 · 1075 阅读 · 0 评论 -
GC.GetTotalMemory方法
GC.GetTotalMemory方法方法描述: 获取目前所有受控代码分配的字节数。带有一个参数,bool值,用来标识是否先进行垃圾收集再计算字节数。命名空间:SystemAssembly:mscolib.dll方法签名: public static long GetTotalMemory(bool forceFullCollection)参数说明: forceFullColle翻译 2008-11-26 14:08:00 · 6736 阅读 · 0 评论 -
C#垃圾回收之二次回收机制
MSDN2原文: 实现 Finalize 方法或析构函数对性能可能会有负面影响,因此应避免不必要地使用它们。用 Finalize方法回收对象使用的内存需要至少两次垃圾回收。当垃圾回收器执行回收时,它只回收没有终结器的不可访问对象的内存。这时,它不能回收具有终结器的不可访问对象。它改为将这些对象的项从终止队列中移除并将它们放置在标为准备终止的对象列表中。该列表中的项指向托管堆中准备被调原创 2008-11-17 22:49:00 · 2041 阅读 · 0 评论 -
C#中Finalize方法的问题
先声明本文转自大虾李建忠!首先来看如下的代码:using System; public classGrandpapa { ~Grandpapa(){ Console.WriteLine("Grandpapa.~Grandpapa");} } public classParent:Grandpapa转载 2008-11-10 23:15:00 · 1189 阅读 · 0 评论 -
利用C#实现标准的 Dispose模式
下面有一个简短的例子,它演示了你在实现这种模式的时候所提供的代码框架。MyResourceHog类演示了实现IDisposable接口、终结器的代码,并建立了一个虚拟的Dispose方法:publicclass MyResourceHog : IDisposable { //已经被处理过的标记 privatebool转载 2008-11-10 22:39:00 · 783 阅读 · 0 评论 -
关于DotNet的GC、Dispose
关于GC .NET的GC机制有这样两个问题:首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。为了解决第一个问题,.NET提供了析构函数,在C#中是~ClassName的形式。如果某个类定义了析构函数,.NET会在第一次的GC中调用析构函数,第二次才真正进行资源释放。这就允许了我们能转载 2008-11-10 22:55:00 · 799 阅读 · 0 评论 -
Programming C#前三章总结
整数类型通常比更小的类型快,因为现代cpu已经为整数类型的处理进行了优化。而且由于需要插入填充以对齐内存,使用更小的数据类型往往并不节省空间。c#通过垃圾回收机制来回收内存,不存在c++中delelte这样的操作符。c#中要求明确赋值,即一个变量声明之后,如果没有赋值的话,是不允许操作该变量了。只有一种例外情形,即声明时加了out关键字。out关键字的出现也就是为了解决明确赋值的问题的。i原创 2008-11-09 22:08:00 · 914 阅读 · 0 评论 -
实现 Dispose 方法
类型的 Dispose 方法应该释放它拥有的所有资源。它还应该通过调用其父类型的 Dispose 方法释放其基类型拥有的所有资源。 Dispose 方法应该为它处置的对象调用 GC.SuppressFinalize方法。如果对象当前在终止队列中,GC.SuppressFinalize 防止其 Finalize 方法被调用。执行 Finalize 方法会大大减损性能转载 2008-11-10 22:49:00 · 821 阅读 · 0 评论 -
Finalize、dispose、dispose(bool disposing)
Finalize 和Dispose(bool disposing)和 Dispose() 的相同点: 这三者都是为了释放非托管资源服务的. Finalize 和 Dispose() 和Dispose(bool disposing)的不同点: Finalize是CRL提供的一个机制, 它保证如果一个类实现了Finalize方法,那么当该类对象被垃圾回转载 2008-11-10 23:21:00 · 969 阅读 · 0 评论 -
证明析构函数隐式转换为vitual的finalize方法
我们自己写一个非常简单的类,如下所示:using System;usingSystem.Collections.Generic;using System.Text; namespaceDestructPractise{ class TestDestructor { static voi原创 2008-11-12 19:11:00 · 897 阅读 · 0 评论 -
析构函数和Finalize()之间的那点事
如果我们在类中没有定义析构函数,则CLR不会自动给这个类添加一个析构函数。代码如下:using System;usingSystem.Collections.Generic;using System.Text; namespace OwnFinalize{ class TestOwnFinalize {原创 2008-11-12 19:56:00 · 3085 阅读 · 0 评论 -
深入理解.Net中的内存释放,以及有关的注意事项
首先声明,本文转自微软中国社区!引言作为一个.NET程序员,我们知道托管代码的内存管理是自动的。.NET可以保证我们的托管程序在结束时全部释放,这为我们编程人员省去了不少麻烦,我们可以连想都不想怎么去管理内存,反正.NET自己会保证一切。好吧,有道理,有一定的道理。问题是,当我们用到非托管资源时.NET就不能自动管理了。这是因为非托管代码不受CLR(Common LanguageRun转载 2008-11-13 22:57:00 · 1847 阅读 · 0 评论 -
Using的用法
1.using指令。using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到。例如:using System; 一般都会出现在*.cs中。2.using别名。using + 别名 = 包括详细命名空间信息的具体的类型。这种做法有个好处就是当同一个cs引用了两个不同的命名空间原创 2008-11-15 21:33:00 · 1416 阅读 · 0 评论 -
静态构造函数
1、如果一个类没有定义静态构造函数,就算它有静态字段,编译器也不会自动给这个类生成一个默认的静态构造函数。验证如下:using System;using System.Collections.Generic;using System.Text;namespace testStaticConstructor{ class B { public static int Y =原创 2008-11-16 01:05:00 · 703 阅读 · 0 评论 -
如何自定义配置节点
目录自定义配置节点中相关类的介绍自定义配置单节点自定义配置多节点使用实现接口方式来自定义配置节点自定义配置节点中相关类的介绍(返回)自定义配置单节点(返回)向项目中添加System.Configuration引用。ConfigurationSection、ConfigurationElement、ConfigurationElementColle原创 2009-01-07 21:02:00 · 3617 阅读 · 3 评论 -
关于委托和事件的形象代码
using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication7{ delegate void 事件处理格式1(); delegate void 事件处理格式2(int n); class 遥控器 //事件引发者转载 2008-11-14 19:19:00 · 645 阅读 · 0 评论 -
异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法)
让我们来看看同步异步的区别:同步方法调用在程序继续执行之前需要等待同步方法执行完毕返回结果异步方法则在被调用之后立即返回以便程序在被调用方法完成其任务的同时执行其它操作.NET框架基类库中有好几种类都可以提供同步和异步的方法调用。因为同步方法调用会导致程序流程中途等待,所以采用同步方法的情况下往往会导致程序执行的延迟相比来说,在某些条件下选择异步方法调用就可能更好一些例如,有的时候程序需要给多个W原创 2009-03-18 11:14:00 · 3543 阅读 · 1 评论