新普金娱乐网址


数学奇葩之数学老师

SQL 之连接查询

《.NET 设计规范》第 8 章:使用正式

  • 九月 07, 2018
  • 数学
  • 没有评论

       

第 8 章:使用专业

       
曾经我们无话不说,喝了酒,撸过差,睡了马路,都展现了对方最好狼狈的貌。16春秋之我们以为直到老了我们都还会是如此,不曾怀念,那不行交手,我们真就是这么告别了,没啥话,没有酒。在新兴众有酿又不同故事的时节,我往自家身边人说由了公的故事。

8.1 数组

  要于公共 API 中优先采取集合,避免下数组。

  不要使用就读的数组字段。虽然字段本身是仅读的,用户不能够修改其,但用户可以修改数组中之素。

  考虑采用不规则数组,而毫无用多维数组。

  

       
事情接二连三会带动被自己惊喜。那不行而来查找我,我们盖在路边摊上,油腻的案子,呛人的烟子,我们端起杯子,就像是我们白天还当联名同,虽然我们曾经四年无见了。

8.2 修饰属性

  要以命名自定义修饰属性类时累加“Attribute”后缀。

  要在概念自己之梳洗属性时用 AttributeUsageAttribute。

  要用自然填参数定义也才读属性。

  要提供构造函数参数来针对一定填参数进行初始化。每个参数的讳应该与针对应属性的名如出一辙(但大小写会不同)。

  避免提供构造函数参数来对可选属性(可选参数)进行初始化。

  避免对从定义修饰属性之构造函数进行重载。

  要尽量用从定义修饰属性类密封起来。这样见面要对修饰属性的索更快。

  

       
交情匪慌,但你生自来熟。你转学过来,刚好与自身开了同桌,年少的时刻总是傻傻的还要快速的。转眼毕业两三年了,后来大家说来一集同学聚会,就受“我了解乃见面来,所以自己顶。”都联系了尚于关系的老同学,我联系起了你顿时号镇同桌,我看我们或高达数学课瞎掰的我们,我以为你还是颇上课猜不发答案的您。我忘记了,你先天自来熟。

8.3 集合

  不要以官 API 中行使弱类型集合。

  不要在公共 API 中使用 ArrayList 或 List<T>。

  不要在公共 API 这种应用 Hashtable 或 Dictionary<TKey,
TValue>。

  不要动 IEnumerator<T>、IEnumerator
或实现了即点儿单接口之一之外其他品类,除非是作 GetEnumerator
方法的归路。

  不要以同样档中而实现 IEnumerator<T> 和
IEnumerable<T>。对非泛型接口 IEnumerator 和 Enumerable
来说呢同样如此。

  要因此最为泛的类别来作参数类型。大多数为聚集为参数的分子还施用
IEnumerable<T> 接口。

  避免采取 ICollection<T> 或 ICollection 来做参数 –
如果那目的仅仅只是为了看该接口的 Count 属性。

  不要提供可安装的集合属性。

  要为此 Collection<T> 或其子类 –
如果属性或返回值表示只是读写的聚集。

  要就此 ReadOnlyCollection<T> 或其子类,在个别动静下用
IEnumerable<T>,如果属性或返回值表示仅读的集纳。

  考虑下泛型集合基类的子类,而并非直接利用该集。

  考虑就此 Collection<T> 或 ReadOnlyCollection<T>
的子类来作为常用方法与常用属性的回值。

  考虑动用产生键集合 –
如果凑这种囤的素都起绝代的键值(名字、ID
等等)。有键集合是一个能够而为整数值和键值为觅引来访问的集结,在贯彻时一般会让其派生自
KeyedCollection<TKey, TItem>。

  不要打集合属性或以凑为返回值的方式中回到
null。而使回一个拖欠集合或空数组。

  不要被性返回快照集合,属性应该回到实况集合。

  要就此快照集合或实况的
IEnumerable<T>(或其的子类)来代表不平静的成团(也就是说,无需显式地修改就可能会见生反之聚合)。

  不要让性返回快照集合,属性应该归实况集合。

  要就此快照集合或实况的 IEnumerable<T>
(或其的子类)来表示不安静之成团(也就是说,无需显式地修改就可能会见起变更的聚合)。

  要在计划新的汇聚时落实
IEnumerable<T>。如果成立,还得考虑实现 ICollection<T> 甚至
IList<T>。

  考虑实现非泛型集合接口(IList 和 ICollection)-
如果经常得拿集传为以这些参数为输入的 API。

  避免为品种实现集接口 – 如果类型的 API
很复杂,而且跟聚集的定义无关。

  不要继续自非泛型的联谊基类,比如 CollectionBase。要动用
Collection<T>,ReadOnlyCollection<T>,以及
KeyedCollection<TKey, TItem>。

  要在为项目命名时累加“Dictionary”后缀 – 如果类型实现了 IDictionary 或
IDictionary<TKey, TValue> 接口。

  要以吗品种命名时抬高“Collection”后缀 – 如果类型实现了
IEnumerable(或她的旁子类)接口,并且类型表示的凡一个因素列表。

  要当命名自定义之数据结构时,使用相当的数据结构名。

  避免在呢集聚抽象命名时上加代表其实际落实之后缀,比如“LinkedList”或“Hashtable”。

  考虑就此集合元素的品类名当集名字的前缀。

  考虑被就读集合的名添加“ReadOnly”前缀,如果后发或会见加以及之对应的可写集合,或和之对应之可写集合在框架中早就是。

 

       
我看你或你,我要自身。我拐弯抹角和您打自了先与而常玩的猜测我是谁之玩,你还并未怀疑出自我是哪位我就算告了公自是谁。可是,你瞬间转换了戒备森严的音,好像,我未是来查找你到同学聚会,我是来寻找你借钱的。你说而发出空来,我说好!

8.4 DateTime 和 DateTimeOffset

  要利用 DateTimeOffset –
如果想使表示一个准儿地时间点。例如,用它来计算现在底时日、事务开始的工夫、文件修改的日子、记录事件的光阴,等等。如果非清楚时区,那么尽管下
UTC。与 DateTime
更实用的景相比,上述现象更加广泛,因此于默认情况下该运用
DateTimeOffset。

  要于另不相符用绝对化时间点的状况下下
DateTime,比如会适用于不同时区的企业开门的工夫。

  要以非清楚时区或偶尔不明了时区的图景下下
DateTime。如果数量出自老式系统,那么可能会见生出这种情形。

  不要在会用 DateTimeOffset 的早晚以 DateTimeKind。

  要为此 DateTime 来代表所有的日期(比如生日),并拿时刻有如为
00:00:00.不使就此 DateTimeOffset 来表示日期。

 

        后来己非知情您晤面不见面来,但是本人从来不等。因为我知您是公自是自。

8.5 ICloneable

  不要实现 ICloneable。

  不要在集体 API 中运用 ICloneable。

  考虑呢索要克隆机制的类型定义 Clone
方法。一定要是当文档中有目共睹说明该法执行的凡深复制还是浅复制。

  

8.6 IComparable<T> 与 IEquatable<T>

  要吧值类型实现 IEquatable<T>。

  要在贯彻 IEquatable<T>.Equals 时,同样遵循为掩盖 Object.Equals
而制定的业内。

  要于贯彻 IEquatable<T> 的又覆盖 Object.Equals。

  考虑在实现 IEquatable<T> 的同时重载 operator == 和 operator
!=。

  要以实现 IComparable<T> 的还要落实 IEquatable<T>。

  考虑以促成 IComparable<T>
的以重载比较操作符(<、>、<=、>=)。

 

8.7 IDisposable

 

8.8 Nullable<T>

  考虑用 Nullable<T>
来代表那些或无存在的价(比如可选取的价值)。举个例子,如果要是自数据库中归一个强类型的记录,并且其中有一个特性对应的凡表明中一个可有可无的列,那么即使当以
Nullable<T>。

  不要采用 Nullable<T> –
除非在接近之景下而见面因为引用类型可以吗 null
而考虑就此引用类型来替代它。例如,不该据此 null 来表示可卜参数。

  避免用 Nullable<bool>
来表示通用的有三栽状态的价值。Nullable<bool>
应该只用来代表确可摘的布尔值:true、false
以及不可用。如果至少是想表示拥有三栽状态的值(例如
yes、no、cancel),那么得考虑动用枚举。

  避免使 System.DBNull。要先利用 Nullable<T>。

 

8.9 Object

  要于埋 Object.Equals 方法时,遵守其定义之契约。

  要在埋 Equaals 方法的而覆盖 GetHashCode 方法。

  考虑以盖 Object.Equals 方法的还要落实 IEquatable<T> 接口。

  不要从 Equals 方法吃丢掉来深。

  要挂值类型的 Equals 方法。

  要经过兑现 IEquatable<T> 来提供一个因为该值类型我吗参数的
Equals 重载方法。

  考虑覆盖 Equals 以供价值当语义 –
 如果引用类型表示的是一个价值。例如,对那些表示数值或其它数学试题的援类型来说,可以设想覆盖
Equals 方法。

  不要吧可变的援类型实现价值相当语义。

  要盖 GetHashCode 方法 – 如果盖了 Object.Equals 方法。

  要包对另外两个目标的话,如果 Object.Equals 方法返回
true,那么她的 GetHashCode 方法的返回值也相应同。

  要竭尽所能让种的 GetHashCode 方法发生随机分布的散列码。

  要力保无怎么转移对象,GetHashCode 都见面回来完全相同的价。

  避免起 GetHashCode 方法吃丢掉来很。

  要遮盖 ToString 方法 – 只要能够返回既出因此,又容易被丁读的字符串。

  要尽可能吃 ToString() 方法返回短小的字符串。

  考虑吧各国一个实例返回一个举世无双之字符串。

  要运容易阅读的名字,而不要动则独一无二,但也于人口束手无策清楚的
ID。

  要以回到跟区域性有关的音信时,根据当前线程的区域性来针对字符串进行格式化。

  要提供重载方法 ToString(string format) 或落实 IFormattable 接口 –
如果 ToString()
方法返回的字符串与区域性有关,或者发强方式来对字符串进行格式化。例如,DateTime
既供了重载方法,又实现了 IFormattable 接口。

  不要从 ToString() 方法返回空字符串或 null。

  避免从 ToString() 方法中丢掉来很。

  要保 ToString() 方法不见面发出副作用。

  要由此 ToString()
的掩盖措施来报暨安全性有关的信,前提是得先行获对应的批准。如果无法得到特许,那么相应在回去的字符串中除去对安全性有关的信。

  考虑给 ToString 方法输出的字符串能够为该项目的剖析方法对地分析。

  

8.10 序列化

  要在设计经验类型时考虑到序列化。

  考虑为种支持数据协定序列化 – 如果急需以 Web
服务受到使用该档,或索要以 Web 服务被针对该类型进行持久化。

  考虑被项目只支持 XML 序列化,或以支持数据协定序列化和 XML 徐丽华 –
如果用以徐丽华类型时生成的 XML 的格式来更多之决定。

  考虑于种支持运行时序列化 – 如果急需跨越 .NET Remoting
的分界传输类型。

  不要只为了进行一般的持久化而支持 XML
序列化或运行时序列化。应该先支持数据协定序列化。

  考虑以品种中之分子定义为国有的 – 如果类型会为用于不完全可信之条件。

  要为拥有以了 DataMemberAttribute 的性质实现 getter 和
setter。为了能吃多少协定序列化程序对项目进行序列化,属性必须产生 getter
和 setter。如果类型不会见用来不了可信的环境遭受,那么 getter 和 setter
中之一个或者有限独可不是公有的。

  要用序列化毁掉函数来针对反序列的实例进行初始化。

  考虑下 KnownTypeAttribute
来表示那些当反序列化复杂的靶子图时应该会因此到之切切实实品种。

  要以创造或者转移只是序列化的型时考虑于后兼容性及前进兼容性。

  考虑为了支持新镇版本的双向转换而落实 IExtensibleDataObject。

  避免在规划项目时特地考虑 XML 序列化,除非有显的理由而本着转移的 XML
内容加以控制。XML 序列化技术既深受眼前介绍的多寡协定序列化技术所取代。

  考虑实现 IXmlSerializable 接口 – 如果利用 XML 序列化修饰属性后转移的
XML 内容还非可知满足急需。这个接口有有限单艺术,ReadXml 和
WriteXml,可以据此他们来了控制转变的 XML 内容。还足以吃项目应用
XmlSchemaProviderAttribute 来针对转移的 XML 架构加以控制。

  考虑支持运行时序列化 – 如果类型会让用于 NET Remoting。例如,由于
System.AddIn 命名空间应用了 .NET Remoting,因此当 System.AddIn
的外接程序(add-in)之间传输的备项目且须支持运行时序列化。

  考虑实现运行时序列化模式 –
如果想如果完全控制序列化的百分之百经过。例如,想以序列化或反序列的时节进行数量易。

  要拿序列化构造函数定义为让保障之,并提供简单单参数,参数的种和命名要与脚的样例代码完全相同。

  要显式地实现 ISerializable 接口的分子。

  要为 Iserializable.GetObjectData
的实现以一个链接求,这样做是为确保单独生全可信之代码和周转时序列化程序才能够顾该成员。

 

8.11 Uri

  要使用 System.Uri 来表示 URI 和 URL 数据。

  考虑啊极常用之牵动 System.Uri 参数的成员提供基于字符串的重载成员。

  不杀未假思索地吧具备因 System.Uri 的积极分子提供基于字符串的重载成员。

  要调用基于 System.Uri 的重载成员 – 如果有些言语。

  不要当字符串中蕴藏 URI/URL 数据。

  

8.12 System.Xml 的使用

  不要为此 XmlNode 或XmlDocument 来代表 XML 数据。要尽可能使
IXPathNavigable、XmlReader、XmlWriter 或 XNode 的子类型。XmlNode 和
XmlDocument 的计划目的并无是以公开露被外界的 API。

  要当受 XML 或回到 XML 的积极分子被,以 XmlReader、IXPathNavigable 或
XNode 的子类型为输入或输出。

  不要打 XmlDocument 派生子类 –
如果想如果创建的路表示下层对象模型或数据源的 XML 视图。

  

8.13 相等性操作符

  不要仅更载相等性操作符中的一个。

  要保 Object.Equals 与相等性操作符具有完全相同的语义及类似之习性。

  避免起相等性操作符中抛来特别。

  要重载值类型的相等性操作符 – 如果相等性是起义。

  避免重载可换引用类型的相等性操作符。

  避免重载引用类型的相等性的相等性操作符 –
如果那促成会晤引用相等性的落实慢得多。

  

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图