- 浏览: 158953 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
北极的。鱼:
几个常用的CSS效果:1.色块透明,文字不透明:设置色块的rg ...
网页前端的浏览器兼容 -
北极的。鱼:
数字证书的作用就是用来说明,里面的公钥是谁的。
数字签名 -
北极的。鱼:
数字证书的作用,其实就是证明,证书里包含的公钥是哪个人的。
数字签名 -
北极的。鱼:
面试题,类似冒泡排序把一个字符串的大写字母放到字符串的后面,各 ...
【转】冒泡排序 -
北极的。鱼:
另一种简单桶排序实现:
using System;
using ...
【转】桶排序(Bucket Sort)
最近要写一个网络报表。
众所周知,网络报表是程序员的一大噩梦。
幸运的是,了解了下需求,然后去网络上大概看了下报表相关的信息。
感觉微软自带的RDLC报表能完全满足需求了。
不过,受伤的总是我。
老大一句:“要做成组件,下次调用直接拖拉就行,不需要手动操作!”
...
请问:天黑是神马感觉?!
这句话的意思就是要完全动态生成报表(不了解rdlc报表的童鞋们去操作下试试就知道了)。
里面要用到的技术,我大概想了一下。
主要就是XML的架构定义和序列号,反序列话。其他的没什么。不过,就这2个技术,让我感觉顿时落入了地狱(两个我都不熟悉。)。
没办法,只能硬着头皮搞了。
第一个遇到的问题就是c#特性机制了。
稍微看了下,懂了,就先记录下一些自认为经典的例子吧(2个小时前,我连这个[]叫特性都不知道,或者说都没怎么见过这个运算符这个用。2个小时看了几个代码,尤其是下面示例的代码,就懂了!)。
不多说,如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { BoardingCheckAttribute boardingCheck = null; object[] customAttributes = typeof(HumanPropertyBase).GetCustomAttributes(true); Console.WriteLine(typeof(HumanPropertyBase).IsSerializable); foreach (System.Attribute attribute in customAttributes) { if (attribute is BoardingCheckAttribute) { boardingCheck = attribute as BoardingCheckAttribute; Console.WriteLine(boardingCheck.Name + "'s ID is " + boardingCheck.ID + ", he/she wants to " + boardingCheck.Destination + " from " + boardingCheck.Departure + " by the plane " + boardingCheck.FlightNumber + ", his/her position is " + boardingCheck.PositionNumber + "."); } } Console.ReadLine(); } } [Serializable] [BoardingCheckAttribute("123","louis",22,12,"aaaa","ccccc")] public class HumanPropertyBase { public string Name { get; set; } public int Age { get; set; } public int Gender { get; set; } [Obsolete("I'm so old, don't kill me!", true)] public void Run(int speed) { // Running is good for health. } } public class BoardingCheckAttribute : Attribute { public string ID { get; private set; } public string Name { get; private set; } public int FlightNumber { get; private set; } public int PositionNumber { get; private set; } public string Departure { get; private set; } public string Destination { get; private set; } public BoardingCheckAttribute(string id, string name, int flightNumber, int positionNumber, string departure, string destination) { this.ID = id; this.Name = name; this.FlightNumber = flightNumber; this.PositionNumber = positionNumber; this.Departure = departure; this.Destination = destination; } } }
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple = true) // multiuse attribute ] public class Author : System.Attribute { string name; public double version; public Author(string name) { this.name = name; version = 1.0; // Default value } public string GetName() { return name; } } [Author("H. Ackerman")] public class FirstClass { // ... } // No Author attribute public class SecondClass { // ... } [Author("H. Ackerman"), Author("M. Knott", version = 2.0)] public class ThirdClass { // ... } class TestAuthorAttribute { static void Main() { PrintAuthorInfo(typeof(FirstClass)); PrintAuthorInfo(typeof(SecondClass)); PrintAuthorInfo(typeof(ThirdClass)); } private static void PrintAuthorInfo(System.Type t) { System.Console.WriteLine("Author information for {0}", t); System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t); // reflection foreach (System.Attribute attr in attrs) { if (attr is Author) { Author a = (Author)attr; System.Console.WriteLine(" {0}, version {1:f}", a.GetName(), a.version); } } } }
网上搜到的解释:(对应第二段代码)
使用反射访问属性(C# 编程指南)
如果没有检索自定义属性的信息和对其进行操作的方法,则定义自定义属性并将其放置在源代码中就没有意义。C# 具有一个反射系统,可用来检索用自定义属性定义的信息。主要方法是 GetCustomAttributes,它返回对象数组,这些对象在运行时等效于源代码属性。此方法具有多个重载版本。有关更多信息,请参见 Attribute。
属性规范,如:
C#
[Author("H. Ackerman", version = 1.1)]
class SampleClass
在概念上等效于:
C#
Author anonymousAuthorObject = new Author("H. Ackerman");
anonymousAuthorObject.version = 1.1;
【备:我是第一次看到这个写法,然后兴匆匆的去试了下类的属性,发现这个写法不使用了。
疑惑:难道这个写法只适用于特性的实例化么?如果高手见到,还请指教。】
但是,直到查询 SampleClass 以获取属性时才会执行此代码。对 SampleClass 调用 GetCustomAttributes 会导致按上述方式构造并初始化一个 Author 对象。如果类还有其他属性,则其他属性对象的以类似方式构造。然后 GetCustomAttributes 返回 Author 对象和数组中的任何其他属性对象。之后就可以对此数组进行迭代,确定根据每个数组元素的类型所应用的属性,并从属性对象中提取信息。
评论
属性:是面向对象思想里所说的封装在类里面的数据字段。
特性:不需要你生理上包含这些属性,就像上面的HumanBase类没有IsSerializable这样的属性,特性只需要在类或方法需要的时候加上去就行了。
就相当于:
属性是人天生的特征,而特性是以后你需要是时候才获得的特征。
发表评论
-
【转】.NET老程序员推荐的7个开发类工具
2016-02-01 18:27 608很幸运工作以来一直是.NET + SQL Server 的开 ... -
【转】LAMDA表达式学习
2015-07-27 01:48 688转自: http://www.cnblogs.com/Tey ... -
深入.NET托管堆(managed heap)
2014-12-28 17:26 897转自http://blog.sina.com.cn/s/b ... -
C#中关于托管资源和非托管资源
2014-12-28 15:16 533转自百度文库 下面说一下在C#中使用托管资源和非托 ... -
[转]net GC
2014-09-17 22:02 580转自:http://blog.csdn.net/sykpb ... -
C#技术漫谈之垃圾回收机制(GC)
2014-07-22 00:15 849转自:http://kb.cnblogs.com/page ... -
Lambda表达式的前世今生
2014-07-10 22:58 737转自: http://www.cnblogs.com/Oce ... -
Net托管世界的应用程序域和线程
2014-05-17 01:41 1252转载:http://www.360doc.com/conte ... -
后台用C#发起HttpWeb请求
2014-09-17 22:03 783public static string HttpPost ... -
silverlight中的控件pivotviewer。
2012-02-17 17:33 1487最近的一个项目需要用到silverlight中的控件pivot ... -
【转】C#XML读写
2011-08-16 09:07 866一.前言: XML是微软.Net战略的一个重要组成部分,而 ... -
【转】盗链问题
2011-07-08 11:18 1076盗链 的危害我就不说了,网上有很多。 直接分析盗链原理 ... -
【转】C#-ADO.Net连接池和连接字符串剖析
2011-06-01 15:48 1979连接到数据库服务器通 ... -
【转】C# Sql连接池
2011-06-01 14:35 1711使用连接池 连接到数 ... -
【转】C#实现连接池
2011-06-01 11:04 2552转自:http://www.cnblogs.com ... -
【转】const 与 readonly知多少
2011-05-23 10:25 896转自:http://www.cnblogs.c ... -
【转】Message Queue(微软消息队列)
2011-05-20 11:52 932Message Queue(微软消息队列) Mes ... -
C#解析Json的类
2011-04-13 16:53 1563网上转的,自己没测试过。大家有好的方法请跟帖共享,最好是要自己 ... -
c#获得元数据转JSON数据格式
2011-04-13 16:50 1219代码经过测试(非本人),看官有更好的后台数据转JSON的方法请 ... -
【转】C# Control的Invoke和BeginInvoke及其实现机制
2011-01-20 11:31 1747转自: http://www.soft-bin.com/ht ...
相关推荐
在这个例子中,我们首先获取`MyClass`的`Type`对象,然后调用`GetCustomAttribute`方法查找`MyCustomAttribute`。如果找到了,我们就打印出描述信息。 WpfAttribute可能是项目中用于处理WPF(Windows Presentation ...
在这个例子中,`MyCustomAttribute`可以应用于类或方法,并且有一个`Description`属性,用于存储描述信息。 接下来,我们可以在代码中使用这个特性: ```csharp [MyCustom("这是一个使用特性的示例")] public ...
在C#编程语言中,"继承"和...通过这三个小例子,初学者可以直观地了解C#中的继承和多态,并在实践中加深理解。在实际编程中,这两个特性不仅简化了代码结构,还提高了程序的灵活性和扩展性,是C#开发者必备的技能。
在这个"串口操作小例子"中,我们探讨的是如何在C#中利用P/Invoke技术来与硬件设备进行通信,如通过串行端口(Serial Port)进行数据传输。P/Invoke是.NET Framework提供的一种机制,允许托管代码(Managed Code,即...
在这个例子中,`AuthorInfo`特性可以应用于类和方法,并且可以多次应用,因为`AllowMultiple`设置为`true`。`AttributeUsage`特性用于指定新特性可以应用的目标类型。 接下来,我们将看到如何在代码中使用这个...
这个"C#100个小例子"的压缩包文件显然是为了帮助初学者或有一定基础的学习者更好地理解并掌握C#语言的核心概念和常见操作。下面我们将详细探讨这些例子可能涵盖的知识点。 1. **基本语法**: C#的基础包括变量声明、...
在每个例子中,应当包含问题的描述、解决方案的代码、以及代码的运行和调试技巧,这样有助于学习者理解每个概念的实际应用。同时,解决每个实例后,应尝试进行代码优化和错误检查,以提升编程习惯和代码质量。 总的...
在C#编程语言中,开发小程序通常涉及到各种各样的实用功能和技巧,这些小程序可以帮助初学者更好地理解C#的基础和高级特性。标题“51个C#小程序例子”表明这是一份包含多个示例项目的资源,旨在帮助学习者通过实践来...
这个“C#的100个小例子”压缩包提供了丰富的实践教程,涵盖了C#语言的基础到高级特性,旨在帮助学习者通过实际操作来理解和掌握C#的用法。 1. **基础语法** - 变量声明:C#支持多种数据类型,如int、string、bool...
例子中可能包括如何创建类、实例化对象以及如何使用方法和属性来实现数据操作。 3. **异常处理**:在C#中,异常处理是通过try-catch块来实现的。学习如何有效地处理可能出现的错误和异常,可以提高代码的健壮性。 ...
在这个"FluorineFx C#搭建简单小例子"中,我们将深入探讨如何使用FluorineFx在C#环境中构建一个基本的服务。 首先,我们需要理解FluorineFx的工作原理。它是通过AMF(Action Message Format)协议来传输数据的,这...
【标题】"C#例子。First Head C#里的一个例子。"揭示了这是一个关于C#编程语言的实际示例,特别是涉及到“First Head”,可能是指一个基础或者关键的概念或技术。这个例子是作者亲手编写的,并且已经在Visual Studio...
C#学习经典150例子是一个全面的教程资源,涵盖了从初级到高级的各种编程概念,帮助开发者逐步提升技能,掌握C#的核心特性和实践应用。 1. **基础语法**:C#的基础语法包括变量声明、数据类型、运算符、流程控制(如...
《C#101个例子》是一份涵盖了C#编程语言多方面应用的教程资源,旨在帮助初学者和有一定经验的开发者深入理解并熟练掌握C#的各项特性。在这个压缩包中,包含了101个独立的示例项目,每个项目都对应一个特定的知识点...
在这个例子中,当用户点击HTML页面的按钮时,会调用C#中的`CallFromHtml`方法,显示一个消息框。 5. **注意事项** - 为了安全性和兼容性,确保在部署应用时考虑目标用户的系统环境,因为WebBrowser控件依赖于用户...
在IT行业中,网络通信是软件开发的一个重要领域,特别是在分布式系统和实时数据交换的应用中。...在这个例子中,我们看到了如何使用C#实现基本的Socket通信,这对于学习网络编程和理解网络通信机制是非常有价值的。
"C#一个小例子"这个标题和描述指向了一个简单的C#程序示例,旨在帮助初学者入门。在这个压缩包中,包含了一个名为"MyOA"的文件,这可能是某个小型应用程序或者代码库的名称,可能与办公自动化(Office Automation)...
C#是一种广泛应用于软件开发,尤其是Windows平台和.NET框架中的面向对象的编程语言。它的语法简洁、强大且灵活,使得C#成为初学者和专业开发者首选的语言之一。本压缩包包含了一系列C#基础知识的代码例子,旨在帮助...
在这个“C# GDI+编程例子”中,我们可以看到各种实例,涵盖了GDI+的基础到高级用法。 首先,让我们深入了解一下GDI+的核心概念。GDI+提供了一个类库,包括`Graphics`、`Pen`、`Brush`、`Font`等类,用于控制图形的...
在汽车租赁小例子中,C#的类和对象概念被充分利用,例如定义汽车、客户和租赁业务相关的类,以模拟现实世界的实体关系。 2. **Windows Forms应用** Windows Forms是.NET Framework提供的用于构建桌面应用程序的...