zoukankan      html  css  js  c++  java
  • 静态方法(Static)到底该不该用?

    最近在review同事代码的时候发现一个问题,很多类里边穿插了一些静态方法,而且情况很普遍,调用的时候有的需要实例化,有些不需要实例化直接调用。我问他为什么要用那么多静态方法,他说“使用方便,不需要实例化,而且这些静态方法不需要保存状态,不需要调用外界变量,应该是线程安全的”。后来我们一起研究讨论了一下静态方法的使用问题,结论如下:


    1. 静态方法不需要实例化,使用方便

    2. 静态方法不存在常驻内存,效率高等幻觉,可以看看这篇文章

    3. 一个类里面不要穿插静态方法和非静态方法,因为违反OO和设计原则

    4. 大量使用静态方法有违OO原则

    5. 使用静态方法的情况:适合用在helper类型的辅助类、基础类,这个类本身就定义成static class,看一段微软的示范代码:

       internal static class Guard
        {
            
    public static void TypeIsAssignableFromType(Type assignee, Type providedType, Type classBeingBuilt)
            {
                
    if (!assignee.IsAssignableFrom(providedType))
                    
    throw new IncompatibleTypesException(string.Format(CultureInfo.CurrentCulture,
                        Properties.Resources.TypeNotCompatible, assignee, providedType, classBeingBuilt));
            }

            
    public static void ValidateMethodParameters(MethodBase methodInfo, object[] parameters, Type typeBeingBuilt)
            {
                ParameterInfo[] paramInfos 
    = methodInfo.GetParameters();

                
    for (int i = 0; i < paramInfos.Length; i++)
                    
    if( parameters[i] != null )
                        Guard.TypeIsAssignableFromType(paramInfos[i].ParameterType, parameters[i].GetType(), typeBeingBuilt);
            }
        }


  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/Mainz/p/1893151.html
Copyright © 2011-2022 走看看