在C#中应该使用短小的方法

原创 2007年10月03日 21:01:00
 在使用C#之前,我们可能使用了不同的语言,体验着不同的编程环境和背景。这导致我们的方法(或者说函数)的长度有着不同的看法。

极端的面向过程编程人员会见过这样的规范:任何函数都不要超过20行;但是给单片机写程序的人可能有着完全不同的规范:函数调用不能超过5层,极可能把功能写在一个函数里。

这是由不同的需求造成的:前者要求尽可能的分割功能,体现出面向过程编程对功能分割的优势;后者是因为没有足够的空间实现长长的调用堆栈,必须尽可能的为节省内存而考虑。

那么在C#中,我们的方法该写多长呢?

事实上,我们应该使用短小的、思路清晰的方法。

或许你会说,上的方法会尽量节省函数调用的成本,但是,或许在之前的某些地方这样没错,现在我们谈的是C#,情况并不是这样。
我们都知道,在C#中代码先被变成IL,然后在运行前被JIT编译成Native Code。JIT是按照方法进行编译的,也就是说它会在真正需要某一个方法之前编译它。这样,尽可能小的方法会减少我们程序的载入时间。
我们看下面的一段代码:

public static void CheckDirectoryExist(string filePath)
{
    StringBuilder msg 
= new StringBuilder();
    
if (Directory.Exists(filePath))
    
{
        msg.Append(
"The directory ");
        msg.Append(filePath);
        msg.Append(
" has been exists");
    }

    
else
    
{
        Directory.CreateDirectory(filePath);
        msg.Append(
"The directory ");
        msg.Append(filePath);
        msg.Append(
" has been created.");
    }

    
return msg.ToString();
}

不管Directory.Exists(filePath)返回的是true还是false,两个代码块中的代码都会被编译。
如果写成这样:

public static void CheckDirectoryExist(string filePath)
{
    if (Directory.Exists(filePath))
    
{
        
return DirectoryExists();
    }

    
else
    
{
        
return DirectoryNotExists();
    }

}

调用的两个方法中盛放之前的两个代码快。则只会在Directory.Exists(filePath)返回true或false时编译二者中的一个方法。这样,程序的载入时间必然会缩短。

这个例子只是一种简单的特殊的情况,真正的情况是:有人会在程序中写上一个几百行的方法,或是在某个很少会进入的逻辑分支里写了大量的逻辑。这都会加重程序载入的负担。

JIT编译器会正确的进行函数的内联等处理,不需要我们对它进行太多的干预。相反的是,我们手工干预得越多,越是难以让JIT编译器自己选择较优的方法。正确的方法是:写短小,清晰的方法。这样不会让我们的程序变慢,而会使我们的程序更容易理解,载入更快。

参考:《C#高级编程》《.NET大局观》《Effective C#》

相关文章推荐

短小强悍的C#定时关键程序

  • 2010年05月25日 22:58
  • 152KB
  • 下载

对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

内联函数与宏定义   在C中,常用预处理语句#define来代替一个函数定义。例如:     #define MAX(a,b) ((a)>(b)?(a):(b))   该语句使得程序中每个出现M...

Linq简介,C#使用方法

  • 2013年10月15日 13:34
  • 91KB
  • 下载

C# Timer的多线程使用方法

  • 2013年03月29日 10:55
  • 58KB
  • 下载

记录一个短小精干的消息队列的项目地址

[文章作者:张宴 本文版本:v1.0 最后修改:2010.03.18 转载请注明原文链接:http://blog.s135.com/httpsqs_1_2/ ]   HTTPSQS(HTTP Simp...

c#txt使用方法

  • 2012年03月20日 09:27
  • 3KB
  • 下载

C#学习笔记:控件BackColor属性与ForeColor的使用方法

1.解释 (1)BackColor属性 BackColor属性表示控件的背景颜色,各个颜色颜色分量的取值范围是0-255的整数。 (2)ForeColor属性 ForeColor属性表示控件的...

c#的日期函数使用方法

  • 2010年05月13日 10:09
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在C#中应该使用短小的方法
举报原因:
原因补充:

(最多只允许输入30个字)