首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

在方法内定义的变量为什么不会丢失数据?该怎么处理

2012-04-26 
在方法内定义的变量为什么不会丢失数据?C# codeusing Systemusing System.IOnamespace ConsoleApplicati

在方法内定义的变量为什么不会丢失数据?

C# code
using System;using System.IO;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args) {            //总行数            int totalLineCount = 0;            //目录            string directory;            if (args.Length > 0) {                directory = args[0];            }            else {                directory = Directory.GetCurrentDirectory();            }            totalLineCount = DirectoryCountLines(directory);            Console.WriteLine(totalLineCount);            Console.ReadLine();        }        /// <summary>        /// 计算目录数        /// </summary>        /// <param name="directory"></param>        /// <returns></returns>        static int DirectoryCountLines(string directory) {            //这里的变量不是每次方法运行一次就会把次赋为0吗?为什么还可以累加上次的结果。            int lineCount = 0;            foreach (string file in Directory.GetFiles(directory, "*.txt")) {                lineCount += CountLines(file);            }            //递归子目录            foreach (string subdirectory in Directory.GetDirectories(directory)) {                lineCount += DirectoryCountLines(subdirectory);            }            return lineCount;        }        /// <summary>        /// 计算行数        /// </summary>        /// <param name="file"></param>        /// <returns></returns>        private static int CountLines(string file) {            string line;            int lineCount = 0;            FileStream stream = new FileStream(file, FileMode.Open);            StreamReader reader = new StreamReader(stream);            line = reader.ReadLine();            while (line != null) {                if (line.Trim() != "") {                    lineCount++;                }                line = reader.ReadLine();            }            reader.Close();            return lineCount;        }           }}


[解决办法]
程序貌似没啥问题啊,,,

[解决办法]
是因为你递归的问题,先把变量压栈,然后在出栈,这样你出栈的变量还保留这被压栈时的值,出来后就会加上你当前的值
[解决办法]
探讨

是因为你递归的问题,先把变量压栈,然后在出栈,这样你出栈的变量还保留这被压栈时的值,出来后就会加上你当前的值

[解决办法]
主要问题在于你的函数返回值也是int,再加上变量也是int累计,及自己跟踪看看吧
[解决办法]
方法结束,方法中 的值类型都会被 立即释放销毁;引用类型会 被 .Net 内存回收器 间接销毁;

函数值只会有 一个返回值被返回,且不会在函数内销毁;

——至于,递归;这只是一个方法此次调用的问题:子方法不执行完,母方法的数据状态依然保持!!

递归只是在于:子方法下可能有 孙方法,孙方法下面可能还有 重孙方法;——方法中数据的销毁,也是 从 重孙方法> 孙方法 > 子方法 > 母方法;

——你的程序在递归过程中,母方法的 数据方然得保存着!

————————————————————————————————————————————
你的递归中:DirectoryCountLines 和 CountLines 
都是自己调用自己,即,母方法 和 子方法 都是同一个方法体.....

热点排行