如何从另一个类文件中调用方法/函数

时间:2013-04-26 06:54:05

标签: c# asp.net-mvc-3

我尝试创建此函数(和其他函数)并将其放在我的项目中的单独的类文件中,该文件位于“/Helpers/UploadFiles.cs”下

namespace Artikelhantering.Helpers
{
public class UploadFiles
{

    private void EnsureDirectoriesExist(string SKU)
    {

        // if the directory doesn't exist - create it. 
        if (!System.IO.Directory.Exists("//servername/wwwroot/prodimg/" + SKU))
        {
            System.IO.Directory.CreateDirectory("//servername/wwwroot/prodimg/" + SKU);
        }

    }
}

然后在控制器中我添加了使用Artikelhantering.Helpers; ,它还被添加到web.config文件的命名空间部分以及global.asa.cx。

然后我想我可以从控制器中的ActionResult中调用它,就像这样

[ChildActionOnly]
public ActionResult _EnumerateFolder(string SKU)
        {
            // create directory if it does not exist
            EnsureDirectoriesExist(SKU);

            ViewBag.SKU = SKU;
            var folder = Directory.EnumerateFiles("//servername/wwwroot/prodimg/" + SKU);
            return View(folder);
        }

但我得到的只是:

错误2当前上下文中不存在名称“EnsureDirectoriesExist”

尝试将其写为UploadFiles.EnsureDirectoriesExist();但这也不起作用。我如何调用这些方法而不将它们全部放在同一个文件中?我想更好地组织这个。

5 个答案:

答案 0 :(得分:5)

该方法是私有的。您无法访问其他类的私有成员。

此处还有其他一些问题:

  1. 您编写的方法是一个实例方法,因此您需要有一个类的实例来调用该方法。
  2. 如果您想使用UploadFiles.EnsureDirectoryExists()来调用它,则需要将其设为类方法(static)。
  3. 我不确定您是否可以按照尝试的方式创建新目录。如果您尝试在运行此代码的同一台计算机上创建目录,请使用本地文件名。
  4. 1)的示例代码:

    UploadFiles uf = new UploadFiles();
    uf.EnsureDirectoryExists();
    

    2)的示例代码:

    public class UploadFiles
    {
        public static void EnsureDirectoriesExist(string SKU)
        {
            // if the directory doesn't exist - create it. 
            if (!System.IO.Directory.Exists("//servername/wwwroot/prodimg/" + SKU))
            {
                System.IO.Directory.CreateDirectory("//servername/wwwroot/prodimg/" + SKU);
            }
        }
    }
    

    我还建议您使用Google阅读C#教程,该教程为您提供有关哪些类以及如何使用它们的信息。

答案 1 :(得分:1)

首先,将EnsureDirectoriesExist的访问修饰符更改为public 尝试使用以下代码更改ActionResult _EnumerateFolder方法:

public ActionResult _EnumerateFolder(string SKU)
{
    // create directory if it does not exist
    new UploadFiles.EnsureDirectoriesExist(SKU);

    ViewBag.SKU = SKU;
    var folder = Directory.EnumerateFiles("//servername/wwwroot/prodimg/" + SKU);
    return View(folder);
}

答案 2 :(得分:1)

  1. 这里不正确的第一件事是方法accessibility levels。为了从类体外部调用方法,它应该是公共
  2. 此外,您调用此方法的方式也不正确。要以所需的方式执行此操作,您应该使您的类静态,以避免创建类的实例来调用方法。
  3. 所以:

    public static class Helper 
    {
          public static void EnsureDirectoriesExist(string SKU)
          {
               ...
          }
    }
    

答案 3 :(得分:0)

将您的课程标记为静态,然后尝试:

public static class UploadFiles
{

    public void EnsureDirectoriesExist(string SKU)
    {
        //your code
    }
}

然后:

public ActionResult _EnumerateFolder(string SKU)
{
        UploadFiles.EnsureDirectoriesExist(SKU);

        //your code
}

答案 4 :(得分:0)

使您的目录方法公开静态。然后你可以这样称呼它

Artikelhantering.Helpers::UploadFiles.EnsureDirectoriesExist(SKU);

如果您无法更改签名...您可以创建一个公共包装器方法并以相同的方式调用它。如果你不能使方法成为静态的,那么你应该首先创建一个类的实例,最后调用新的公共包装器方法。