小新的技术天地

Make It Works !

博客园 首页 新随笔 联系 订阅 管理

随笔分类 -  C#技术揭秘(Inside C# 2rd Edition)学习笔记

摘要:因为.Net Framework中的String类是封闭的,所以我们不能从它进行派生来扩展它的功能。 虽然String类已经提供了很多有用的方法来让我们进行字符串的处理和操作,但是有时候一些特殊的的要求还是不能能到满足。 一个例子就是:假如有一个因为句子,比如:“how are you”,我们需要把每个单词的首字母都改成大写,当然人工改写很大一篇文章是很费力的,但是我们查阅.Net Fra... 阅读全文
posted @ 2005-05-06 13:41 小新0574 编辑

摘要:首先是组合case标签。例子如下: 1using System; 2 3enum Tenders : int 4{ 5 Cash = 1, 6 Visa, 7 MasterCard, 8 AmericanExpress 9};1011class Payment12{13 public Payment(Tenders tender)14 {15 ... 阅读全文
posted @ 2005-04-29 20:50 小新0574 编辑

摘要:要是一个线程进行到一半,想终止了,怎么办呢?请看代码: using System;using System.Threading;class ThreadTest{ //工作线程的方法 public static void WorkerThreadMethod1() { //获得当前正在执行的线程对象 Thread w1 = Thread.Curren... 阅读全文
posted @ 2004-12-09 15:28 小新0574 编辑

摘要:请看代码: using System;using System.Threading;class ThreadTest{ //工作线程的方法 public static void WorkerThreadMethod() { //获得当前正在执行的线程对象 Thread w1 = Thread.CurrentThread; w1.Name... 阅读全文
posted @ 2004-12-09 14:03 小新0574 编辑

摘要:1.typeof 请看代码: using System;using System.Reflection;class Person{ private string name; public string Name { set { name= value; } get { ... 阅读全文
posted @ 2004-12-02 14:55 小新0574 编辑

摘要:我们可以实现ISerializable接口来自定义串行化行为。这个接口只有一个方法GetObjectData。这个方法用于将对类对象进行序列化所需的数据填进SerializationInfo对象。你使用的格式化器(比如BinaryFormatter)将构造SerializationInfo对象,然后在序列化时调用GetObjectData。因此,你需要实现GetObjectData,让它添加你从类... 阅读全文
posted @ 2004-10-23 13:47 小新0574 编辑

摘要:假设我们需要XML,但是不想要SOAP特有的额外信息,应该怎么办?我们可以使用类库XMLSerializer。代码如下: using System;using System.IO;using System.Xml.Serialization;//[Serializable]public class Insect{ public string name; //[NonSeria... 阅读全文
posted @ 2004-10-22 19:14 小新0574 编辑

摘要:我们只要对前一个例子进行简单的修改就可以把我们的App改写成使用SoapFormatter。1.对System..Runtime.Serialization.Formatters.Soap.dll的引用。(经过我的试验,如果在VS.NET下需要添加,用csc编译不需要)2.将using语句中的一个using System.Runtime.Serialization.Formatters.Binar... 阅读全文
posted @ 2004-10-21 21:37 小新0574 编辑

摘要:注:原书上翻译为串行化,MSDN翻译为序列化,我以MSDN为准,写为序列化。可以使用属性(Attribute)将类的元素标为可序列化的(Serializable)和不可被序列化的(NonSerialized)。.NET中有两个类实现了IFormatter借口的类中的Serialize和Deserialize方法:BinaryFormatter和SoapFormatter。这两个类的区别在于数据流的... 阅读全文
posted @ 2004-10-20 22:45 小新0574 编辑

摘要:指定属性继承规则 AttributeUsage的最后一个参数是继承标志,指出速航行是否可以被继承。如果设为true,它的意义取决于AllowMultiple属性的值。 继承 AllowMultiple 结果 True False 派生的属性覆盖基属性 True True 派生的属性和基属性共存 using System;using System.Reflection;... 阅读全文
posted @ 2004-10-18 22:30 小新0574 编辑

摘要:默认情况下,所有属性都是单次使用的。所以编译一下代码会得到一个编译器错误。 using System;public class SomethingAttribute : Attribute{ public SomethingAttribute(String str) { }}//Error[Something("abc")][Something("def")]class MyC... 阅读全文
posted @ 2004-10-17 21:59 小新0574 编辑

摘要:[AttributeUsage( validon, AllowMultiple = allowmultiple, Inherited = inherited)]再看AttributeUsage属性,其中validon是一个位置参数(必须的),指定属性可以附着于哪些类型,它是AttributeTargets类型的,这个枚举值定义如下:public enum AttributeTar... 阅读全文
posted @ 2004-10-15 12:33 小新0574 编辑

摘要:文档记录的ArributeUsage调用惯例如下:[AttributeUsage( validon, AllowMultiple = allowmultiple, Inherited = inherited)]好处:属性的用户不必从头到尾查看属性类的源代码,并且可以找出作为命名过的参数使用的公共读/写字段和特性(Property)。 阅读全文
posted @ 2004-10-15 12:00 小新0574 编辑

摘要:属性类的位置参数和命名过的参数的类型被限制为以下几种:* bool, byte, char, double, float, int, long, short, string* System.Type* object* enum类型,条件是它和嵌套它的任何类型都是公共可访问的。* 包含以上任何类型的一维数组。 因为参数类型被限制为此列表中列出的类型,所以不能把类这样的数据结构传递进属性的构造... 阅读全文
posted @ 2004-10-14 19:35 小新0574 编辑

摘要:1.在使用命名过的参数时,必须先指定位置参数。以下代码将导致一个编译器错误:[RegKey(Hive = RegHives.HKEY_LOCAL_MACHINE,“Foo“)]public int Foo;2.不能给位置参数取名字。[RegKey(ValueName = “Foo“, Hive = RegHives.HKEY_LOCAL_MACHINE)]public int Foo;编译器指出“... 阅读全文
posted @ 2004-10-14 17:16 小新0574 编辑

摘要:如前一节所述,RegKeyAttribute属性构造器为:public RegKeyAttribute(RegHives Hive, String ValueName)根据这个属性构造器原型,我们把这个属性附着给一个字段:[RegKey(RegHives.HKEY_CURRENT_USER, "Foo")] public int Foo;其实可以使编程更加容易。如果参数在大多数情况下不变,可以使... 阅读全文
posted @ 2004-10-14 12:42 小新0574 编辑

摘要:6.3.3 字段属性 using System;using System.Reflection;namespace FieldAttribs{ public enum RegHives { HKEY_CLASS_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_CURRENT_C... 阅读全文
posted @ 2004-10-13 11:17 小新0574 编辑

摘要:6.3.2 方法属性 using System;using System.Reflection;namespace MethodAttribs{ public class TransactionableAttribute : Attribute { public TransactionableAttribute() { } } ... 阅读全文
posted @ 2004-10-12 22:20 小新0574 编辑

摘要:6.3.1 类属性通过属性查看远程服务器类型: using System;public enum RemoteServers{ JEANVALJEAN, JAVERT, COSETTE }public class RemoteObjectAttribute:Attribute{ public RemoteObjectAttribute(RemoteServers S... 阅读全文
posted @ 2004-10-12 18:20 小新0574 编辑