c# 类和成员的修饰详细介绍

 更新时间:2012年11月21日 11:37:02   作者:  
本文将详细介绍c# 类和成员的修饰,需要的朋友可以参考下
基本概念
一.类是对于业务处理对象的封装, 包括状态和行为的封装.
二.类的成员种类:
1.常量: 数据值恒定不变的一个符号
2.字段: 字段表示一个只读或者可读写的数据值. 通常用字段来标识一个类或者类产生对象的某种状态,
在实践中,通常将字段标识为private, 避免从类/对象外破坏类/对象的状态。
3.实例构造器(Constructor):将新对象的实例字段初始化为良好初始状态的一种特殊方法。
4.类型构造器,也就是静态的Constructor, 用来初始化类的静态字段。
5.方法:一个特殊的函数,用来更改或者查询一个类型或者对象的状态。
6.属性:用来封装字段在外部的访问,避免直接访问字段。
7.事件:封装一个委托链,通过某种触发机制,通知委托链中的方法执行。
8.子类型:嵌套在类型中的类型,作用是分离复杂性。
9.操作符重载:重新定义在类所产生对象之间的特定操作:例如 +, -, ++等。
10.转换操作符:定义如何显示或者隐式的将类转换为另外一种类型。

类的修饰关键字
一. 可访问性修饰
1. public:用于非嵌套类,访问无限制。
2.internal:用于非嵌套类,仅对定义程序集的所有代码可见。
3.private:用于嵌套类,仅对包含它的类的成员可见。
4.protected:用于嵌套类,仅对包含它的类A以及A的派生类A_Derived中的成员可见。
二.静态类修饰符
1.static:用于定义永远不需要实例化的类,例如Console, Math, Environment等。
2.静态类不能继承除System.Object以外的基类,也不能实现接口
3.静态类只能定义静态成员
4.静态类不能作为字段,方法参数或者局部变量使用,因为它们都代表引用了一个实例的变量。
三.分部类修饰符
1.Partial: 用于将一个类或者结构分解成不同的逻辑单元,目的在于分解类型的复杂性。
2.常见场景在Winform定义窗体或者控件时,自动生成的前端单元和逻辑单元。
四.组件与多态修饰符
1.abstract: 表明一个抽象类,不能直接生成该类的实例,只能通过继承的方式实现。
2.sealed: 表明该类型不能用于基类型。
3.new:用于在衍生类中定义的嵌套类型,表明该嵌套类型与基类中的同名嵌套类型无关。

类成员的修饰关键字
一.可访问性:不详细解释,与类的修饰大同小异
1.public
2.private
3.protected
4.internal
二.静态成员:不详细解释
三.组件与多态修饰:
1.abstract: 用于基类成员,表示为了构造派生类型的实例,派生类型必须实现并且重写这个方法。
2.virtual: 用于基类成员,表示这个成员可由派生类型重写
3.override: 用于派生类成员,表示派生类型重写了基类型的成员。
4.sealed: 用于基类成员,表示这个成员不能被派生类型重写,只能用于方法。
5.new:用于派生类成员,表示这个成员与基类中的同名成员不存在重载关系。

本章知识最佳实践
一.设计类和成员的可访问性的最佳实践:
1.定义类时,除非确定它将作为基类使用,不然应该讲它指定为Sealed。
原因是:派生类型的行为不可预测,如果基类没有进行密封,在后续版本中或者其他团队成员定义的派生类有可能会破坏基类的状态或者预期行为。
2.定义类时,如果不确定将在程序集外公布这个类,则应该将类指定为internal。
原因也是出于安全性方面的考虑。
3.在类的内部,所有数据字段都应该定义为private,原因是出于对状态的保护。每个类/对象的状态都应该只能由自己本身来控制。
4.在类的内部,除非确定某个方法,属性需要在子类中重写,不然不要使用virtual。
原因有两个,一是调用虚方法在CLR中会消耗更多性能;二是虚方法会丧失基类对自身行为的控制权。
5.在类中定义嵌套类时,应将嵌套类修饰为private。这个规则在VS中会被强制检查。
二.静态类与单例模式的异同:
1.相同之处:都为类型成员提供单一入口
2.不同之处:
a.静态类难以控制初始化时机
b.静态类不支持基类,派生类,也不支持实现接口,对多态的支持性较差。
c.静态类的实现较为简单,不支持多态的情况下安全性较高

相关文章

  • 剖析设计模式编程中C#对于组合模式的运用

    剖析设计模式编程中C#对于组合模式的运用

    这篇文章主要介绍了设计模式编程中C#对于组合模式的运用,理论上来说组合模式包含抽象构件、树叶构件和树枝构件三个角色,需要的朋友可以参考下
    2016-02-02
  • 利用AOP实现SqlSugar自动事务

    利用AOP实现SqlSugar自动事务

    这篇文章主要为大家详细介绍了利用AOP实现SqlSugar自动事务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • C#如何调用Python生成的pyd文件

    C#如何调用Python生成的pyd文件

    这篇文章主要介绍了C#如何调用Python生成的pyd文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • C# javascript 读写Cookie的方法

    C# javascript 读写Cookie的方法

    这篇文章介绍了C# javascript 读写Cookie的方法,有需要的朋友可以参考一下
    2013-10-10
  • C#用委托BeginInvoke做异步线程

    C#用委托BeginInvoke做异步线程

    今天小编就为大家分享一篇关于C#用委托BeginInvoke做异步线程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 浅析.NET中AsyncLocal的实现原理

    浅析.NET中AsyncLocal的实现原理

    这篇文章主要为大家详细介绍了.NET中AsyncLocal的具体实现原理,文中的示例代码讲解详细,具有一定的借鉴价值,如果有讲得不清晰或不准确的地方,还望指出
    2023-08-08
  • C#更新SQLServer中TimeStamp字段(时间戳)的方法

    C#更新SQLServer中TimeStamp字段(时间戳)的方法

    这篇文章主要介绍了C#更新SQLServer中TimeStamp字段(时间戳)的方法,涉及C#操作数据库字段的相关技巧,需要的朋友可以参考下
    2015-05-05
  • WPF实现播放RTSP视频流

    WPF实现播放RTSP视频流

    这篇文章主要为大家详细介绍了WPF实现播放RTSP视频流的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • C#无损高质量压缩图片实现代码

    C#无损高质量压缩图片实现代码

    这篇文章主要为大家详细介绍了C#无损高质量压缩图片的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • C#实现常见加密算法的示例代码

    C#实现常见加密算法的示例代码

    这篇文章主要为大家详细介绍一下C#中一些常见加密算法(Base64编码、凯撒密码、Vigenere密码、DES、AES)以及它们的实现代码,感兴趣的可以了解一下
    2022-07-07

最新评论