none
关于参数为引用类型的问题 RRS feed

  • 问题

  • 有如下代码自定义了一个类:

    {

        class Folder

        {

            private string _name;

            private bool _isLoaded;

            private string _sourcePath;

            private string _thumbnaiPath;

            public Hashtable bmps;

            public Folder(string exePath, string name)

            {

                _name = name;

                _sourcePath = exePath + "\\图片目录\\" + name;

                _thumbnaiPath = exePath + "\\缓存目录\\" + name;

                _isLoaded = false;

                if (!Directory.Exists(_sourcePath))

                {

                    Directory.CreateDirectory(_sourcePath);

                }

                if(!Directory .Exists (_thumbnaiPath ))

                {

                    Directory .CreateDirectory (_thumbnaiPath );

                }

     

            }

            public bool IsLoaded

            {

                get { return _isLoaded; }

            }

            public string Name

            {

                get { return _name; }

            }

            public string GetSourcePath()

            {

                return _sourcePath;

            }

            public string GetThumbnaiPath()

            {

                return _thumbnaiPath;

            }

            public Bitmap GetThumbnail(string soureceName)

            {

                return (Bitmap)bmps[soureceName];

            }

      

      

            public void Add(string aName)

            {

                string picName = Path.GetFileNameWithoutExtension(aName) + ".BMP";

                string sourceFile = _sourcePath + "\\" + aName;

                string thumbnaiFile = _thumbnaiPath + "\\" + picName;

                CreateThumbnail(sourceFile, thumbnaiFile);

                bmps.Add(Path.GetFileName(sourceFile), new Bitmap(thumbnaiFile));

            }

        

        

            public override string ToString()

            {

                return _name;

            }

         }

    }

    在另一个类中有代码:

    Folder folder = new Folder(Application.StartupPath, txtFolderName.Text);
                    lstFolder.Items.Add(folder);

    请问在  lstFolder.Items.Add(folder); 中,参数为folder时,是否FOLDER类中所有的方法都会执行

    2010年9月15日 2:26

答案

  • 哦,那就是不会执行任何方法。Items是ObjectCollection类型,这是object的一个collection,类Folder同时也是一个object,每次调用

     lstFolder.Items.Add(folder); 时候,都只是将这个folder(Folder对象)add到objectcollection中,不会执行任何方法。你可以通过Ildasm查看下IL代码。

    2010年9月15日 3:20
  • 1)始菜单->程序->Microsoft Visual Studio 2008(2005)->Visual Studio Tools->Visual Studio 2008 Command Prompt ;

    2)输入ildasm,回车,弹出IL代码查看器;

    3)打开你编译之后的exe或者DLL文件即可。

    也可以使用其他工具来查看。一些对应的命令可参照博客园的几篇博客:

    http://www.cnblogs.com/anytao/archive/2007/08/22/must_net_14.html

    2010年9月15日 9:40

全部回复

  • “是否FOLDER类中所有的方法都会执行”我对这句话不是很理解,看我这样子说对不对:

    你的意思是在整个lstFolder中,使用index或者foreach遍历出其中的一个item,如items[2]能否执行这个items[2]里的所有方法?

    若我理解正确的话,答案是肯定的。

    2010年9月15日 2:34
  • 我的意思是:FOLDER类中定义了一些方法,比如

    public string GetSourcePath()

            {

                return _sourcePath;

            }

     

     

    public void Add(string aName)

            {

                string picName = Path.GetFileNameWithoutExtension(aName) + ".BMP";

                string sourceFile = _sourcePath + "\\" + aName;

                string thumbnaiFile = _thumbnaiPath + "\\" + picName;

                CreateThumbnail(sourceFile, thumbnaiFile);

                bmps.Add(Path.GetFileName(sourceFile), new Bitmap(thumbnaiFile));

            }

     

     

    还有这个重写

     public override string ToString()

            {

                return _name;

            }

     

    是否这个类中定义的方法都会执行,还是只执行public override string ToString()

     

    2010年9月15日 2:42
  • 你在把这个folder实例加到lstFolder这个列表中的时候,应该不会执行folder的任何方法,甚至连ToString()都不会。

    2010年9月15日 3:15
  • 哦,那就是不会执行任何方法。Items是ObjectCollection类型,这是object的一个collection,类Folder同时也是一个object,每次调用

     lstFolder.Items.Add(folder); 时候,都只是将这个folder(Folder对象)add到objectcollection中,不会执行任何方法。你可以通过Ildasm查看下IL代码。

    2010年9月15日 3:20
  • 如何通过Ildasm查看下IL代码?能详细点吗?不胜感激! 本人初学者,望见谅。
    2010年9月15日 9:24
  • 1)始菜单->程序->Microsoft Visual Studio 2008(2005)->Visual Studio Tools->Visual Studio 2008 Command Prompt ;

    2)输入ildasm,回车,弹出IL代码查看器;

    3)打开你编译之后的exe或者DLL文件即可。

    也可以使用其他工具来查看。一些对应的命令可参照博客园的几篇博客:

    http://www.cnblogs.com/anytao/archive/2007/08/22/must_net_14.html

    2010年9月15日 9:40