随笔分类 - .NET基础
摘要:当一个程序集的名称,版本,文化,Public Key都做了设置,就可以把这个程序集叫做"强名称程序集"。强名称程序集可以防止被仿冒或篡改。本篇首先创建一个强名称程序集,接着模拟篡改程序集,看看最终结果如何? □ 创建一个强名称程序集 →在"C#程序集系列08,设置程序集版本"和"C#程序集系列09,程序集签名"中,在F盘的as文件夹中创建了一些文件→删除所有除了.cs类型的所有文件→创建一个密...
阅读全文
摘要:在"C#程序集系列08,设置程序集版本"中体验了为程序集设置版本,但对于程序集的安全性来说,还远远不够。本篇体验程序集的签名。 □ 程序集的签名 →F盘as文件夹下有多个文件→在程序集所在文件夹创建密匙→打印密匙密匙是一堆乱码,这是经过加密了。→在密匙的基础上创建公匙Public Key→打印公匙Public Key注意:这里的public token是public key经过哈希算法而获得的...
阅读全文
摘要:区别一个程序集,不仅仅是程序集名称,还包括程序集版本、程序集公匙、程序集文化等,本篇体验通过界面和编码设置程序集版本。 □ 通过Visual Studio设置程序集版本 →右键项目,选择"属性",选择"应用程序"→点击"程序集信息",设置如下,点击确定→点击项目Properties文件夹下的AssemblyInfo.cs,可以看到程序集版本已经设置生效[assembly: AssemblyVe...
阅读全文
摘要:以下几个方面用来区分不同的程序集:○ 程序集名称:Name○ 程序集版本:Version○ 程序集公匙: Public Token○ 程序集文化:Culture 如果没有很严格地按照上面的几个方面来创建程序集,程序集是很容易被篡改的。本篇体验篡改程序集。 →清空F盘as文件夹下的所有文件→在as文件夹下创建Dog.cs类,用记事本打开,编写如下,保存using System;
public...
阅读全文
摘要:CLR在加载程序集的时候会查看程序集清单,程序集清单包含哪些内容呢?可执行文件和程序集有什么区别/ 程序集清单 □ 查看程序集清单 →清空F盘as文件夹中的所有内容→创建MainClass.cs文件→把MainClass.cs编译成程序集→反编译MyDll.dll,在1.txt文件中呈现ildasm /out:1.txt MyDll.dll→打开1.txt文件1.txt
// Metad...
阅读全文
摘要:本篇体验在一个程序集中包含多个module。 □ 创建3个module →删除F盘as文件夹中的一些文件,只剩下如下3个文件→用记事本打开MyFirstModule.cs文件,修改如下,并保存using System;
public class MyFirstModule
{ public static void Hello() { Console.WriteL...
阅读全文
摘要:本篇在一个程序集包含多个module的场景下体验internal的含义。 →查看F盘as文件夹下的文件→删除MainClass.exe→把MyFirstModule和MySecondModule组装到一个程序集中去现在,MyDll.dll程序集中包含了2个module。→反编译,把MyDLL.dll的IL代码显示到3.txt文件中→打开3.txt文件// Metadata version: v4....
阅读全文
摘要:我们经常在项目中引用程序集。通常情况下,一个程序集包含一个module,但一个程序集也可以包含多个module。本篇就来体验:在一个可以被编译成.exe可执行文件的.cs文件中引用多个module。 □ 创建第一个module→在前面2篇文章中,F盘的as文件夹中存放了若干程序集等文件。→打开"VS2012开发人员命令提示",输入如下命令,最终清空了F盘的as文件夹中的所有内容→在F盘的as文...
阅读全文
摘要:继续上一篇"C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序",在F盘的as文件夹中已经有了若干程序集。本篇体验使用记事本查看可执行程序集的IL代码。 →打开"VS2012开发人员命令提示",输入如下命令,并按回车在as文件夹中多了1.txt和1.res这2个文件→输入如下命令打开1.txt // Microsoft (R) .NET Framework I...
阅读全文
摘要:本篇主要体验:编写C#,IL代码,用"VS2012开发人员命令提示"编译成程序集,并运行程序。 □ C#文件编译为程序集 →在F盘创建as文件夹→在as文件夹下创建MyClass.cs→用记事本打开编写如下代码,并保存using System;
public class MyClass
{ public static void PrintSth() { Cons...
阅读全文
摘要:大致来说,委托是一个类,该类内部维护着一个字段,指向一个方法。事件可以被看作一个委托类型的变量,通过事件注册、取消多个委托或方法。本篇分别通过委托和事件执行多个方法,从中体会两者的区别。 □ 通过委托执行方法 class Program { static void Main(string[] args) { Example ...
阅读全文
摘要:在观察者模式中有2个要素:一个是被观察对象,另一个是观察者。但被观察对象的状态发生改变会通知观察者。 举例:把订阅报纸的人看作是观察者,把报纸看作被观察对象。每当有新的新闻就要通知订阅报纸的人。本篇分别用实现接口和使用委托事件的方式来实现。 □ 通过实现接口实现 观察者接口,把接收到的新闻显示出来。 public interface IObserver { v...
阅读全文
摘要:.NET的异常处理机制用来发现、处理运行时错误。如果开发人员没有提供异常的处理机制,就默认采用.NET的机制。 通常使用try...catch...finally捕获异常。try
{ //有可能发生异常
}
catch(Exception ex)
{ //处理异常
}
finally
{ //清理
}
○ 如果没有异常发生,就直接到finally语句块中。○ final...
阅读全文
摘要:移除未使用的命名空间--方法1:右键--"组织using"--"移除未使用的using"--方法2:Shift+F10--"O"—"R" 格式化当前文档,让文档排列齐整--ctrl + K, D 注释--ctrl + K, C 取消注释--ctrl + K, U 满屏/取消满屏--alt + shift + Enter 生成当前项目--shift + F6 生成解决方案--...
阅读全文
摘要:需要记录日志的地方包括:进入方法的时候,传参的时候,统计执行时间,方法返回参数的时候,退出语句块的时候,出现异常的时候,等等。先来体验不使用Micirosoft Unity进行日志记录。 class Program { static void Main(string[] args) { Add(1, 2); Co...
阅读全文
摘要:简单来说,备忘录模式就是支持回退操作。假设让一个Notepad支持回退操作,如何实现呢? 首先需要一个备忘录类。 public class Memento { private string _msg; public Memento(string msg) { _msg = msg; } publ...
阅读全文
摘要:在显示树形结构时,复合模式有很好的体现。本篇显示如下部门结构: 以上,有的节点包含子节点,有的节点部包含子节点。不管是什么节点,每个节点就代表一个部门。 首先设计一个关于部门的抽象基类。 public abstract class DepartmentComponent { public string Name { private set; get; } ...
阅读全文
摘要:假设要做一道红烧肉,做法有很多,在不同的做法中都有相同的部分,比如都要放油、放肉、放调料等。也有不同之处,比如有些做法放可乐,有些做法放甜蜜酱,等等。 先提炼出一个抽象类,该类不仅有制作红烧肉的各个步骤,而且还把各个步骤归纳到另一个方法,我们把这个方法称作模版方法。另外,在模版方法中,对于一些不确定的方面先用抽象方法。 public abstract class HongShaoRou ...
阅读全文
摘要:假设想让遥控器控制电灯的开关、电视机的开关和切换,该如何做? 所有的开、关、切换都是遥控器发出的指令,把这些指令统一抽象成一个接口。 public interface IControl { void Execute(); }把电灯、电视机抽象成类。 public class Tv { public void TurnOn() ...
阅读全文
摘要:假设有一个公司要做产品套餐,即把不同的产品组合在一起,不同的组合对应不同的价格。最终呈现出来的效果是:把产品组合的所有元素呈现出来,并显示该组合的价格。 每个产品都有名称和价格,首先设计一个关于产品的抽象基类。 public abstract class ProductBase { public abstract string GetName(); pub...
阅读全文
浙公网安备 33010602011771号