|
随笔分类 -
C#
c#学习过程中的总结与积累
摘要:C#中的预处理指令作为预处理中的一对:#region name ,#endregion可能是大家使用得最多的,我也常用它来进行代码分块,在一个比较长的cs文件中,这么做确实是一件可以让你使代码更清晰的好办法,VS也自动用这个来包含自动生成的代码,它这么做既可以使开发人员更清晰的查看自己的代码,也开了一个好头,使更多人使用#region。C#中还有好几对预处理指令,可能大家就用得比较少了。#defi...
阅读全文
摘要:1.关于bin目录和obj目录 Bin目录用来保存项目生成后程序集,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。 obj目录是用来保存每个模块的编译结果,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录...
阅读全文
摘要:大家在使用c#写windows服务时,网上很多例子说,使用工具箱中组件中的定时器就可以,但实际上该定时器并不管用,具体原因,微软自称是Framework的bug。 无论是windows窗体中timer还是组件中的timer都是继承自System.Windows.Form.Timer,并不是我们需要的System.Timers ,继承自System.Timers 的timer只有手动创建。 publ...
阅读全文
摘要:1、新建windows service工程 2、新建windows service工程后,系统自动生成一个Service1.cs文件,默认是其设计视图。选择查看其代码,默认有构造函数、OnStart、OnStop三个函数,如下图所示: 3、新建了服务之后,还要设置该服务运行的周期,左侧的ToolBox中有两个timmer,一个在组件下,一个在windows form下,可惜这两个都不能用,我们要手...
阅读全文
摘要:为什么要重载运算符?
在c#中哪些运算符允许重载?
在IL层面,重载的运算符是什么样子的?
重载运算符需要注意些什么?
阅读全文
摘要:嵌套类的作用: 被包含的类可以就是为其外层类服务而存在的,因此它不必向外界暴露。(说得简单点儿,被包含类只是一个辅助类)可以在外层类的定义中定义辅助类。这种被包含的内部类我们称之为嵌套类(nested class),而包含它的类我们直接称为外层类(outer class)。从面向对象的方式来思考,嵌套类所面向的对象就是外层类,它主要就是给外层类服务的。 嵌套类的好处: 嵌套类的好处是可以对外层类的...
阅读全文
摘要:usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; namespaceLookUpGetAndSet { classProgram { intage; publicintAge { get { returnthis.age; } set { age=value...
阅读全文
摘要:静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。静态构造函数具有以下特点: 静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。 无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。静态构造函数的典型用途是:当类使用日志文件时,将使...
阅读全文
摘要:静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。 类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共...
阅读全文
摘要:前几天看书,看到在c#中,判断一个类中两个函数是否是重载函数,函数的返回值类型不是必须条件,这一点跟之前学习的c和c++不太一样,故记录一下。 根据目前的总结,在c#中满足函数重载有以下条件: 1、函数名字相同 2、函数参数个数不同,或者参数对应的类型不同 在c#中,public string show(string s)跟public void show(string s)如果定义在同一个类中,...
阅读全文
摘要:问题 有时需要创建一个自定义类型,它能为开发人员提供一种简单的机制来创建该类型实例的副本。 解决方案实现System.ICloneable接口。该接口只有一个Clone()方法,实现该方法可以实现浅拷贝或者深拷贝。 原理 如果我们有两个值类型的变量,将其中一个变量的值赋给另一个,实际上会创建该值的一个副本,这个副本与原来的值没有什么关系——这意味着改变其中一个的值不会影响另一个变量的值。而如果是两...
阅读全文
摘要:在C#中,Object类型是所有类型的根,大家平常开发中都要跟它打交道,但不见得对它里面的每个方法都知根知底,下面对它里面的每个方法都进行仔细的总结。
阅读全文
摘要:CSC.exe把Visual C#程序代码编译成IL文件时,有着很多参数和开关选项。正确的了解和运用这些参数和开关有时会解决一些看似很棘手的问题。下面就通过一张表来大致说明一下这些参数和开关的具体作用。这些参数和开关选项是按照字母顺序来排列的。其中带"*",是一些常用的参数或开关。选项 用途 @ * 指定响应文件。 /?, /help 在控制台的计算机屏幕上显示编译器的选项 /addmodule ...
阅读全文
摘要:当使用AL.exe创建程序集时, 你可以把一个文件作为资源加入到程序集中, 通过使用/embed[resource]开关. 这个开关接受一个文件(任何文件), 并把文件的内容嵌入到PE文件中. Manifest的ManifestResourceDef表会被更新来反映这个资源的存在. AL.exe也支持/link[resource]开关, 它也是接受一个包含资源的文件, 然而/link[resou...
阅读全文
摘要:除了C#编译器, 你可以使用程序集链接器工具AL.exe来创建程序集. 如果你想创建一个包含着不同编译器构建的模块的程序集(如果你的编译器不支持相应的C# /addmodule开关), 或者你不知道你的程序集打包要求, 这个程序集链接器是很有用的. 你可以使用AL.exe来构建只包含资源的程序集, 成为附属(satellite)程序集, 它主要是用于本地化的目的. AL.exe工具可以产生只包含...
阅读全文
摘要:如果你使用Visual Studio IDE来构建你的项目, 你必须把你要引用的程序集加入到你的项目中. 为了做这件事, 打开Solution Explorer, 对你想增加程序集引用的项目点击右键, 然后选择Add Reference菜单项, 这回弹出Add Reference对话框,如下图所示: 为了让你的项目引用一个程序集, 从列表中选择想要引用的程序集. 如果你要引用的程序集不在这个列表中...
阅读全文
摘要:前面讨论的Program.exe文件不止是一个带有metadata的PE文件, 它也是一个程序集(assembly). 程序集是一个或多个包含类型定义和资源的文件的集合体. 组成一个程序集的文件被放到manifest中, manifest是另一组metadata表, 其包括着组成程序集的文件的名字, 他们也描述着程序集的版本, 语言, 发行者, 公开暴露的类型, 以及组成程序集的所有文件. CL...
阅读全文
摘要:(接上文)现在我们知道了我们创建的是什么类型的PE文件了, 但是在Program.exe中真正是什么? 一个托管PE文件有如下四个主要部分: PE32 (+) header, CLR header, metadata和IL。 PE32(+) header是Windows需要的标准信息, CLR header是用于那些需要CLR才能运行的模块(托管模块)的一小块信息, 这个header包括CLR的...
阅读全文
摘要:(接上篇)在讨论完编译器开关之前, 我愿意讨论一下响应文件(response file), 一个响应文件是一个文本文件, 它包含着一组编译器命令行开关, 当你执行CSC.exe时, 编译器打开这个响应文件并使用每一行开关, 就像这些开关是传递给CSC.exe的命令行一样. 你可以在命令行中通过指定响应文件的名字来命令编译器使用这个文件, 例如, 你可能有如下的响应文件: MyProject.rsp...
阅读全文
摘要:在这一节中, 我将给你展示如何将你的包含各种类型的源文件变成可以部署的文件, 让我们从检查如下的简单应用程序开始吧: publicsealedclassProgram{ publicstaticvoidMain(){ System.Console.WriteLine("Hi"); } } 这个应用程序定义一个类型Program, 这个类型只有一个公开静态的函数Main, 在Main函数里面有另一个...
阅读全文
|