C# 基本特性
2017-08-05 17:46
316 查看
最近要改C++的东西到C#上,它的委托了特性感觉很好的利用了装饰模式和函数指针的优点,非常值得深入学习,Mark基本特性以便查阅
1: #define DoTrace
2: using System;
3: using System.Collections.Generic;
4: using System.Linq;
5: using System.Text;
6: using System.Reflection;
7: using System.Diagnostics;
8: using System.Collections;
9: using System.IO;
10:
11: using System.Runtime.Serialization.Formatters.Binary;
12: using System.Runtime.Serialization.Formatters.Soap;
13: using System.Xml.Serialization;
14: using System.Xml;
15: using System.Runtime.InteropServices;
16:
17:
18:
19:
22:
23:
24: namespace First_C_Sharp
25: {
26:
27:
48:
49:
50:
56: [AttributeUsage(AttributeTargets.Method|AttributeTargets.Class,
57: Inherited = false,
58: AllowMultiple = false)] //限制属性只能引用在方法和类上,并且特性不会被装饰类的派生类继承,不能有MyAttribute的多个实例应用到同一个目标上
59: public sealed class MyAttributeAttribute : System.Attribute
60: {
61: public string Description;
62: public string ver;
63: public string Reviewer;
64:
65: public MyAttributeAttribute(string desc) //一个位置参数
66: {
67: Description = desc;
68: Console.WriteLine("Using Attribute Class:{0}", Description);
69: }
70:
71: }//MyAttributeAttribute Class
72:
73: [MyAttribute("This is a Attribute Class test Class", Reviewer = "Lucy Liu", ver = "1.0Beta")]
74: class attributeTestClass
75: {
76: public void writeDescription()
77: {
78: Console.WriteLine("-----MyAttribute Class Testing----");
79: }
80: }
81:
82:
83:
84:
90:
91: public class dllIMportClass
92: {
93:
94: [DllImportAttribute("CDll_for_DLLImport.dll")]
95: public static extern int sampleMethod(int i);
96:
97: }//dllImportClass
98:
99:
100:
120: [Serializable]
121: public class Book
122: {
123: public string strBookName;
124: [NonSerialized]
125: public string strBookPwd;
126:
127: private string _bookID;
128: public string BookID
129: {
130: get { return _bookID; }
131: set { _bookID = value; }
132: }
133:
134: public ArrayList alBookReader;
135:
136: private String _bookPrice;
137: public void SetBookPrice(String price)
138: {
139: _bookPrice = price;
140: }
141:
142: public Book()
143: {
144: alBookReader = new ArrayList();
145: }
146:
147: public void Write()
148: {
149: Console.WriteLine("Book ID:" + BookID);
150: Console.WriteLine("Book Name" + strBookName);
151: Console.WriteLine("Book Password:" + strBookPwd);
152: Console.WriteLine("Book Price" + _bookPrice);
153: Console.WriteLine("Book Reader");
154: for(int i = 0; i
155: {
156: Console.WriteLine(alBookReader[i]);
157: }
158: }
159: }
160:
161: public class BinarySerialize
162: {
163: string strFile = "c:book.binary";
164:
165: public void Serialize(Book book)
166: {
167: using(FileStream fs = new FileStream(strFile, FileMode.Create))
168: {
169: BinaryFormatter formatter = new BinaryFormatter();
170: formatter.Serialize(fs, book);
171: }
172: Console.WriteLine("Binary Serialize Success");
173: }
174:
175: public Book DeSerialize()
176: {
177: Book book;
178: using (FileStream fs = new FileStream(strFile, FileMode.Open))
179: {
180: BinaryFormatter formatter = new BinaryFormatter();
181: book = (Book)formatter.Deserialize(fs);
182: }
183: Console.WriteLine("Binary Deseiralize Success");
184: return book;
185: }
186: }//BinarySerialize
187:
188: public class SoapSerialize
189: {
190: string strFile = "c:book.soap";
191:
192: public void Serialize(Book book)
193: {
194: using(FileStream fs = new FileStream(strFile, FileMode.Create))
195: {
196: SoapFormatter formatter = new SoapFormatter();
197:
198: formatter.Serialize(fs, book);
199:
200: Console.WriteLine("Soap Serialize Success");
201: }
202: }
203:
204: public Book DeSerialize()
205: {
206: Book book;
207: using(FileStream fs = new FileStream(strFile, FileMode.Open))
208: {
209: SoapFormatter formatter = new SoapFormatter();
210: book = (Book)formatter.Deserialize(fs);
211: }
212: Console.WriteLine("Soap Deserialize Success");
213: return book;
214: }
215: }//SerializeSoap
216:
217: public class XmlSerialize
218: {
219: string strFile = "c:book.xml";
220:
221: public void Serialize(Book book)
222: {
223: using(FileStream fs = new FileStream(strFile, FileMode.Create))
224: {
225: XmlSerializer formatter = new XmlSerializer(typeof(Book));
226: formatter.Serialize(fs, book);
227:
228: Console.WriteLine("XML Serialize Success");
229: }
230: }
231:
232: public Book DeSerialize()
233: {
234: Book book;
235: using(FileStream fs= new FileStream(strFile, FileMode.Open))
236: {
237: XmlSerializer formatter = new XmlSerializer(typeof(Book));
238: book = (Book)formatter.Deserialize(fs);
239: }
240: Console.WriteLine("XML Deserialize Success");
241: return book;
242: }
243: }//SeiralizeXML
244:
245: class Test_Reflection
246: {
247:
248:
251:
252:
253: [Obsolete("Use method SuperPrintOut")] //将特性应用到方法
254: static void PrintOut(string str)
255: {
256: Console.WriteLine(str);
257: }
258:
259: [Conditional("DoTrace")]
260: static void TraceMessage(string str)
261: {
262: Console.WriteLine(str);
263: }
264:
265:
266:
271:
272: static void Main(string[] args)
273: {
274: //Absolete Test
275: PrintOut("Start of Main");
276:
277: //Conditional Test
278: TraceMessage("Test Conditional ");
279: TraceMessage("Test Conditional Again");
280:
281: //Serialize Test
282: Book book = new Book();
283: book.BookID ="1";
284: book.alBookReader.Add("gspring");
285: book.alBookReader.Add("Lucy");
286: book.strBookName = "C#Plus";
287: book.strBookPwd = "*****";
288: book.SetBookPrice("30.00");
289:
290: BinarySerialize bs = new BinarySerialize();
291: SoapSerialize ss = new SoapSerialize();
292: XmlSerialize xs = new XmlSerialize();
293:
294: bs.Serialize(book);
295: ss.Serialize(book);
296: xs.Serialize(book);
297:
298: Book rebook = bs.DeSerialize();
299: rebook.Write();
300: rebook = ss.DeSerialize();
301: rebook.Write();
302: rebook = xs.DeSerialize(); //xml 只能序列化public
303: rebook.Write();
304:
305: //DllImport Test
306: Console.WriteLine("DllImport Test, The Return Value is :{0}", dllIMportClass.sampleMethod(5));
307:
308: //MyAttribute Test
309: attributeTestClass atc = new attributeTestClass();
310: //可用isDefined方法查看特性是否应用到了某个类上
311: Type t = atc.GetType();
312: bool isDefined = t.IsDefined(typeof(MyAttributeAttribute), false);
313: if (isDefined)
314: Console.WriteLine("MyAttributeAttribute is applied to {0}", atc.GetType().Name);
315: //可用GetCustomAttribute方法返回应用到结构上的特性数组,实际返回了Object数组,所以需要将其强制转换为特性类型
316: object[] attrArr = t.GetCustomAttributes(false);
317: foreach(Attribute a in attrArr)
318: {
319: MyAttributeAttribute attr = a as MyAttributeAttribute;
320: if( null!=attr )
321: {
322: Console.WriteLine("Description:{0}", attr.Description );
323: Console.WriteLine("Version Number:{0}", attr.ver);
324: Console.WriteLine("Reviewer ID:{0}", attr.Reviewer);
325: }
326: }
327:
328: Console.ReadLine();
329: }
330: }
331: }
相关文章推荐
- C# 特性的学习(一)
- C# 特性学习(二)
- C# 非模式窗体show()和模式…
- C# 集合类 Array Arraylist List H…
- c# winform委托实例
- 【转】Discuz! 基本知识
- vi/vim 基本使用方法
- C# 绘制曲线(一)
- Emacs 的基本操作
- 3 Nginx的基本配置和优化
- Drupal 模块开发基本教程(二)
- emca 基本命令
- VxWorks 基本启动方式
- kernel PCA的基本推导
- C# List<>简单用法
- C# List<T>基本用法
- C# 图形图像
- C# this的五种用法
- Drupal&nbsp;模块开发基本教程(三)
- C# 如何在 Windows&nbsp…