当前位置:  编程技术>.net/c#/asp.net

c# 类与成员的修饰详解

    来源: 互联网  发布时间:2014-08-30

    本文导语:  有关 c#与成员的修饰,我们从几个方面来为大家作介绍:基本概念、类的修饰关键字、类成员的修饰关键字、以及相关实践。 有需要的朋友,可以参考下。 一、基本概念 1)、类是对于业务处理对象的封装, 包括状态和行为的...

有关 c#与成员的修饰,我们从几个方面来为大家作介绍:基本概念、类的修饰关键字、类成员的修饰关键字、以及相关实践。
有需要的朋友,可以参考下。

一、基本概念
1)、类是对于业务处理对象的封装, 包括状态和行为的封装.

2)、类的成员种类:
1.常量: 数据值恒定不变的一个符号
2.字段: 字段表示一个只读或者可读写的数据值. 通常用字段来标识一个类或者类产生对象的某种状态,
在实践中,通常将字段标识为private, 避免从类/对象外破坏类/对象的状态。
3.实例构造器(Constructor):将新对象的实例字段初始化为良好初始状态的一种特殊方法。
4.类型构造器,也就是静态的Constructor, 用来初始化类的静态字段。
5.方法:一个特殊的函数,用来更改或者查询一个类型或者对象的状态。
6.属性:用来封装字段在外部的访问,避免直接访问字段。
7.事件:封装一个委托链,通过某种触发机制,通知委托链中的方法执行。
8.子类型:嵌套在类型中的类型,作用是分离复杂性。
9.操作符重载:重新定义在类所产生对象之间的特定操作:例如 +, -, ++等。
10.转换操作符:定义如何显示或者隐式的将类转换为另外一种类型。

二、类的修饰关键字
1)、 可访问性修饰
1. public:用于非嵌套类,访问无限制。
2.internal:用于非嵌套类,仅对定义程序集的所有代码可见。
3.private:用于嵌套类,仅对包含它的类的成员可见。
4.protected:用于嵌套类,仅对包含它的类A以及A的派生类A_Derived中的成员可见。

2)、静态类修饰符
1.static:用于定义永远不需要实例化的类,例如Console, Math, Environment等。
2.静态类不能继承除System.Object以外的基类,也不能实现接口
3.静态类只能定义静态成员
4.静态类不能作为字段,方法参数或者局部变量使用,因为它们都代表引用了一个实例的变量。

3)、分部类修饰符
1.Partial: 用于将一个类或者结构分解成不同的逻辑单元,目的在于分解类型的复杂性。
2.常见场景在Winform定义窗体或者控件时,自动生成的前端单元和逻辑单元。

4)、组件与多态修饰符
1.abstract: 表明一个抽象类,不能直接生成该类的实例,只能通过继承的方式实现。
2.sealed: 表明该类型不能用于基类型。
3.new:用于在衍生类中定义的嵌套类型,表明该嵌套类型与基类中的同名嵌套类型无关。

三、类成员的修饰关键字
1)、可访问性:参考类的修饰性
1.public
2.private
3.protected
4.internal

2)、静态成员:参考上方

3)、组件与多态修饰:
1.abstract: 用于基类成员,表示为了构造派生类型的实例,派生类型必须实现并且重写这个方法。
2.virtual: 用于基类成员,表示这个成员可由派生类型重写
3.override: 用于派生类成员,表示派生类型重写了基类型的成员。
4.sealed: 用于基类成员,表示这个成员不能被派生类型重写,只能用于方法。
5.new:用于派生类成员,表示这个成员与基类中的同名成员不存在重载关系。

实践
1)、设计类和成员的可访问性的最佳实践:
1.定义类时,除非确定它将作为基类使用,不然应该讲它指定为Sealed。
原因是:派生类型的行为不可预测,如果基类没有进行密封,在后续版本中或者其他团队成员定义的派生类有可能会破坏基类的状态或者预期行为。
2.定义类时,如果不确定将在程序集外公布这个类,则应该将类指定为internal。
原因也是出于安全性方面的考虑。
3.在类的内部,所有数据字段都应该定义为private,原因是出于对状态的保护。每个类/对象的状态都应该只能由自己本身来控制。
4.在类的内部,除非确定某个方法,属性需要在子类中重写,不然不要使用virtual。
原因有两个,一是调用虚方法在CLR中会消耗更多性能;二是虚方法会丧失基类对自身行为的控制权。
5.在类中定义嵌套类时,应将嵌套类修饰为private。这个规则在VS中会被强制检查。

2)、静态类与单例模式的异同:
1.相同之处:都为类型成员提供单一入口
2.不同之处:
a.静态类难以控制初始化时机
b.静态类不支持基类,派生类,也不支持实现接口,对多态的支持性较差。
c.静态类的实现较为简单,不支持多态的情况下安全性较高。

洋洋洒洒,飞扬于胸间的文字看完了,对于c# 类与成员的修饰,您是否已了解更多了呢?
脚本学堂,祝您学习愉快,期待您的长久关注。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++类静态成员与类静态成员函数详解
  • C++中的常对象与常对象成员详解
  • C++运算符重载 成员函数与友元函数详解
  • java命名空间java.lang.reflect类method的类成员方法: getdefaultvalue定义及介绍
  • 请问:什么是实例成员和类成员?
  • java命名空间java.security.acl接口group的类成员方法: ismember定义及介绍
  • gdb调试时如何进入类成员函数和模板类成员函数?谢谢
  • java命名空间java.lang.reflect接口member的类成员方法: getname定义及介绍
  • 类A为什么从外包继承一个protected成员后,类A的子类为什么不能访问这个成员
  • java命名空间java.security.acl接口group的类成员方法: addmember定义及介绍
  • 将父类变量强制赋予子类变量时,发生了什么?比如子类的成员变量,假如父类中有不存在子类中有的成员变量的情况,那么子类中该变量是否默认取值???
  • java命名空间java.lang.reflect接口member的类成员方法: declared定义及介绍
  • 关于C++静态成员函数访问非静态成员变量的问题
  • java命名空间java.lang.reflect接口member的类成员方法: public定义及介绍
  • getgrnam获得group结构后,如何遍历gr_mem成员或者组成员?
  • java命名空间java.security.acl接口group的类成员方法: members定义及介绍
  • C++类中的常数据成员与静态数据成员之间的区别
  • java命名空间java.lang.reflect接口member的类成员方法: getmodifiers定义及介绍
  • 类静态变量能定义在成员方法中吗?? 在线
  • java命名空间javax.sound.sampled类compoundcontrol的类成员方法: compoundcontrol定义及介绍
  • Python 面向对象 成员的访问约束
  • java命名空间java.lang类class<t>的类成员方法: ismemberclass定义及介绍
  • 成员管理系统 ClubMaster
  • java命名空间java.security.acl接口group的类成员方法: removemember定义及介绍
  • 指向类成员函数的指针其实并非指针


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3