




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
详解C#组件类的特性2009-09-17 16:34 佚名 MSDN我要评论(1)字号:T|T这里我们将介绍.NET中的C#组件类的一些特性,希望本文能对大家有所帮助。AD:我们这里将介绍C#组件类,通过本文大家能对C#组件类有更多的了解。这里不光是C#组件类,还包括VB.NET类型等等。当类成为组件时,类的特性便具有了另外的意义。组件名称仔细选择组件类的名称。类名应具有以下特点:简短且具有描述性,由完整的词组成,且各个词的首字母大写,例如 BusinessRule。这为组织组件以及生成有关组件功能的简短提示提供了一种简便的方法。访问修饰符用私有访问定义的类对程序集的用户是不可见的。这是用于程序集的内部帮助器类的访问级别。将Access 修饰符设置为公共会使C#组件类对程序集的用户可用。若要控制程序集的用户是否可以创建组件的实例,为组件的构造函数指定适当的访问级别。基类除非您打算自己实现 IComponent 接口,否则基类应为 System.ComponentModel.Component 或从 System.ComponentModel.Component 派生的类。您可以在 .NET Framework 中的任何类的参考主题中找到此信息。在 Visual Basic 中,Inherits 语句指定基类。在 C# 中,此基类在类声明中跟在冒号后面。示例如下所示:Visual Basic 复制代码1. ImportsSystem.ComponentModel 2. PublicClassMyComponent 3. InheritsSystem.ComponentModel.ComponentEnd ClassC# 复制代码1. usingSystem.ComponentModel 2. publicclassMyComponent:System.ComponentModel.Component 3. Namespace 语句每个组件都包含在一个“命名空间”中。默认情况下,命名空间是项目的名称。组件程序集的用户将针对包含他们要访问的组件的命名空间添加 Imports (Visual Basic) 或 using (C#) 语句。注意 可以通过将组件包含在附加的 Namespace.End Namespace 块中来添加附加的结构级别。通常来说,组件程序集中的命名空间结构应反映它的内部组织。如果程序集包含大量的组件,则将相关的组件分组在单独的命名空间中是有意义的。/*使用C#轻松编写.Net组件(1)2006-11-02 14:34中国IT实验室我要评论(0)字号:T|T本文将向大家介绍如何使用C#编写在.net framework环境下运行的组件,包括如何编写组件类,如何添加域、属性以及事件,如何编译和分发组件。C#对组件的强大支持,可以大大提高我们的开发效率,从而使我们有更多的精力放在算法设计等方面,开发出更加出色的组件。AD:在.net框架提出之前,编写组件被视为是一种需要高深技巧的工作,令很多人望而生畏。而.net的出现,使得组件的编写变得如此平易近人,而.net framework的核心语言C#,更是被称为面向组件的语言。在这里,我将向大家介绍如何使用C#编写在.net framework环境下运行的组件,包括如何编写组件类,如何添加域、属性以及事件,如何编译和分发组件。首先看下面这段足够简单的代码实例(在后面我们将慢慢将它变成一个五脏俱全的组件):using System; namespace ComponentCS public class StringComponent private string StringsSet;public int StringLengthgetreturn StringsSet.Length;public void Modify(int index,string value)if (index 0) | (index = StringsSet.Length) throw new IndexOutOfRangeException();elseStringsSetindex=value;OnModify();public StringComponent() StringsSet = new string C# String 0,C# String 1,C# String 2,C# String 3;public string GetString(int index) if (index 0) | (index = StringsSet.Length) throw new IndexOutOfRangeException();return StringsSetindex; 一般地,我们首先创建一个命名空间(namespace)用来封装这个组件中一系列的类:namespace CompCS 命名空间的使用非常灵活,它可以被嵌套,也可以将其内部的类分别写在多个文件中,相应地,还可以在一个源文件中声明多个非嵌套的命名空间。下面是一个使用嵌套的命名空间的示例代码:namespace NestIt namespace NestedNameSpace class myClass public static void DoSth() . 你可以这样引用类myClass:NestIt.NestedNameSpace.myClass.DoSth(); 还是回到我们的命名空间CompCS,我们使用下面的语句声明了一个类StringComponent:public class StringComponent 命名空间中的类是必需的,因为C#所有的代码都必须封装在一个个类中,所以没有类的命名空间没有任何价值。下面我们为这个类添加一个公共(public)域:private string StringsSet; 此外,它还可能需要定义一些属性,下面是定义一个只读的属性的例子:public int StringLength get return StringsSet.Length; C#中的属性更充分地体现了对象的封装性,不直接操作类的数据内容而是通过访问器进行访问,它借助于get 和set访问器对属性的值进行读写。而在C+中,这是需要程序员手工完成的一项工作。使用C#轻松编写.Net组件(2)2006-11-02 14:34中国IT实验室我要评论(0)字号:T|T本文将向大家介绍如何使用C#编写在.net framework环境下运行的组件,包括如何编写组件类,如何添加域、属性以及事件,如何编译和分发组件。C#对组件的强大支持,可以大大提高我们的开发效率,从而使我们有更多的精力放在算法设计等方面,开发出更加出色的组件。AD:在属性的访问声明中:只有set 访问器表明属性的值只能进行设置而不能读出只有get 访问器表明属性的值是只读的不能改写同时具有set 访问器和get 访问器表明属性的值的读写都是允许的你或许会发现域和属性是如此相似,确实属性和域的语法比较类似的,但是它们是绝对不同的,区别在于你不能把属性当做变量那样使用,也不能把属性作为引用型参数或输出参数来进行传递,相反的,对于域,没有这些限制。下面的代码定义了这个类的构造函数:public StringComponent() 构造函数必须与类同名,它可以重载,但是不能有返回值,因此它也没有返回值类型前缀。当用户新建一个类的实例时,构造函数就会自动执行,同时,C#的垃圾收集机制开始对这个实例进行管理,并且将在适当的时候回收资源。然后,我们编写了一个GetString()函数,这个函数根据用户传入的index值,返回相应的记录:public string GetString(int index) return StringsSetindex; 要注意的是其中的异常处理的方法:throw new IndexOutOfRangeException(); 作为一个健壮的组件,异常处理机制是不可或缺的,虽然它可能会消耗掉一些资源,但是它带来的安全性的提升会使你觉得消耗的资源简直微不足道。这里使用了一个系统定义的异常类IndexOutOfRangeException(),事实上,更多的情况是你必须自己定义异常类,以适应各种不同的情况。下面的代码示例展示了如何定义一个异常类:public class MyApplicationException : ApplicationException public string AMsg;public MyApplicatonException(string strMsg)AMsg=strMsg; 定义一个异常类与定义普通的类并没有什么区别,唯一的区别在于异常类必须继承自System.Exception类。事实上,微软公司推荐把所有用户自定义的异常类作为ApplicationException类的子类。把类MyApplicationException放到命名空间CompCS中,这样你就可以改写GetString()函数中的异常处理方式。下面是一个带有更完善的异常处理机制的GetString()方法:public string GetString(int index) try if (index 0) | (index = StringsSet.Length) throw new MyApplicationException(参数超出范围); catch(MyApplicationException mErr) Console.WriteLine(mErr.AMsg); catch(Exception Err) Console.WriteLine(Err.Message); return StringsSetindex; 采用类似这样的方式,你可以应付比这复杂得多的情况。下面,我们来考虑给这个类添加事件。事件机制的引入使得开发者可以更灵活地开发程序。下面的代码示例展示了如何定义一个事件:public event EventHandler Modified; 在C#中使用event关键字定义事件。把这个定义放到我们的类ComponentCS.StringComponent中,然后我们添加一个函数Modify(),这个函数修改字符数组StringsSet中指定位置的值,同时引发OnModify事件,而在Modify事件中,我们调用的是事件Modified所指定的函数:public void Modify(int index,string value) if (index 0) | (index = StringsSet.Length) throw new IndexOutOfRangeException(); else StringsSetindex=value; OnModify(); private void OnModify()EventArgs e=new EventArgs();if(!(Modified=null)Modified(this,e); 然后我们可以用如下的方法调用:private void DoIt() StringComponent mysc=new StringComponent();mysc.Modified+=new EventHandler(Called); mysc.Modify(2,another string);public void Called(object o,EventArgs e) Console.WriteLine(Changed);在函数DoIt()中,我们首先建立了一个StringComponent类的对象mysc,然后将它的Mofidied事件关联到Called()方法:mysc.Modified+=new EventHandler(Called); 注意“+=”符号的使用,相反地,如果使用“-=”符号,可以取消这个事件的绑定。现在我们得到了一个虽然简单,但是比较完整的组件类:using System;namespace ComponentCS public class StringComponent private string StringsSet;public event EventHandler Modified;public int StringLengthgetreturn StringsSet.Length;public void Modify(int index,string value)if (index 0) | (index = StringsSet.Length) throw new IndexOutOfRangeException();elseStringsSetindex=value;OnModify();private void OnModify()EventArgs e=new EventArgs();if(!(Modified=null)Modified(this,e);public StringComponent() StringsSet = new string C# String 0,C# String 1,C# String 2,C# String 3;public string GetString(int index) if (index 0) | (index = StringsSet.Length) throw new IndexOutOfRangeException();return StringsSetindex;最后要做的就是把它编译成.dll(动态链接库)文件,以便发布。发布成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度综合电商平台特色商品档口租赁及电商运营服务合同
- 2025年绿色食品冷链物流配送与全程追溯服务合同
- 2025年区块链数据安全处理及保密协议
- 2025年幼儿园幼儿棉被及床上用品租赁采购全面合作协议
- 2025年婚姻终止后共同债务处理与财产公平分割协议书
- 2025年非物质文化遗产传承与保护赠与专项合作协议
- 2025年度知识产权法务员工职务成果归属及商业化使用合同
- 2025跨文化沟通能力提升培训及咨询合同
- 2025年亚马逊FBA全球供应链管理与物流配送合同
- 妇产科中医试题及答案
- 2025年幼儿园教师大班数学工作总结样本(3篇)
- 2025年毕节市农业发展集团有限公司招聘考试笔试试题(含答案)
- 供应链安全管理知识培训课件
- 牛鼻子引流技术
- 严禁燃放烟花炮竹课件
- 宫颈息肉课件
- (2025年标准)班组承包协议书
- 2025秋苏教版科学三年级上册教学设计(附目录)
- 2025国家能源投资集团有限责任公司审计中心社会招聘12人笔试参考题库附带答案详解(10套)
- 2025年全国I卷高考地理试题和答案
- 深圳微利房管理办法
评论
0/150
提交评论