zoukankan      html  css  js  c++  java
  • C# 《编写高质量代码改善建议》整理&笔记 --(五)成员设计

    1.可以字段应该重构为属性

    2.谨慎将数组或集合作为属性

      数组和集合作为属性存在会引起这样的一个分歧;如果属性是只读的,我们通常会认为他是不可改变的。但是如果将只读属性应用于数组和集合,而元素的内容和数量却仍旧可以随意更改。

      建议:如果某个类型含有集合概念的属性,那么他的可见性应该为private或protected,并且,它更应该是一个字段。类型对外只公开必要的方法来操作这个集合。

    3.构造方法应初始化主要属性和字段

      类型一旦被实例化,那么就应该被视为具有完整的行为和属性。

    4.不要在构造方法中调用虚成员

      因为子类中需要重写的虚方法可能会引用子类未初始化的成员。

    5.优先考虑将基类型或接口作为参数传递

      除了公开基类型或接口外,基于同样的道理,方法的参数也应该考虑基类型或接口。

    6.用params减少重复参数

      如果方法的参数数目不定,且参数类型一致,则可以使用params关键字减少重复的参数声明。

      void Method(params int[] nums){}

    7.静态方法与实例方法没有区别

      静态方法在加载时机和内存使用上与实例方法完全一致。类的实例对象在第一次使用时被加载到

    Loader Heap上。类型对象包括其自身的指针,自身的静态字段,方法表等。在这个方法表中,无论是

    静态方法还是实例方法都会被存储起来。

      如果一定要说区别,唯一的区别就是我们需要使用实例方法的时候,首先应该有实例对象。

    从设计角度,如果一个方法跟类型本身有关系,那么应该被设计成静态方法;如果跟类型的实例对象有关系,那么应该被设计成实例方法。

    8.使用扩展方法,向现有类型“添加”方法

      考虑如何让一个sealed类型具备新的行为。我们可能会考虑修改设计,直接修改sealed类型,然后发布新版本,但这依赖你拥有全部的源码,这不好。对于我们来说,FCL是一组第三方公司(微软)提供给

    我们的最好的API。静态类中静态方法中,增加:this关键字

    public class Student
        {
            public bool GetSex()
            {
                return false;
            }
        }
    
        public static class StudentExtension
        {
            public static string GetSexSting(this Student student) //!!!!重点
            {
                return student.GetSex() == false ? "" : "";
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Student sth = new Student();
                Console.WriteLine(sth.GetSexSting());
                Console.WriteLine();
            }
        }

    扩展方法要求:

          扩展方法必须在静态类中,扩展方法必须是静态的;

          第一个参数必须是要扩展的类型,且必须加上了this关键字

    扩展方法注意:

        ①可以扩展密封类

        ②可以扩展第三方程序集中的类型

        ③不支持扩展事件,属性。但是可以扩展接口。

      

  • 相关阅读:
    vsftpd 配置:chroot_local_user与chroot_list_enable详解
    rsync同步目录
    apache
    centos 7 服务管理
    PowerPoint’s Menu is Too Big
    测试网页返回值
    作为人的展现方式
    Java 日期与时间
    Java 随机数
    Character 类
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/10205184.html
Copyright © 2011-2022 走看看